分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

【转载】.NET Remoting学习笔记(三)信道

发布时间:2023-09-06 01:23责任编辑:胡小海关键词:.NET
目录
  • .NET Remoting学习笔记(一)概念
  • .NET Remoting学习笔记(二)激活方式
  • .NET Remoting学习笔记(三)信道

参考:♂风车车.Net

.NET Framework 远程处理基础结构提供下列信道实现:
  • IpcChannel ?
  • TcpChannel ?
  • HttpChannel
IpcChannel

IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能。但如果客户端和服务端不在同一台机器时,我们不能注册IPCChannel。

IpcChannel 执行下列功能:

  • 使用命名管道在发送方和接收方之间通信。
  • 支持以二进制格式和行业标准 SOAP 序列化格式编码负载。
  • 生成并使用对象引用的 ChannelDataStore。
  • 支持模拟和委托。
  • 支持在命名管道上利用访问控制列表 (ACL) 来提供高级访问控制。
TcpChannel

TcpChannel 类使用二进制格式化程序将所有消息序列化为二进制流,并使用 TCP 协议将该流传输至目标统一资源标识符 (URI)。

TcpChannel 执行下列功能:

  • 使用 TCP 套接字在发送方和接收方之间通信。
  • 支持以二进制格式和行业标准 SOAP 序列化格式编码负载。
  • 生成并使用对象引用的 ChannelDataStore。
  • 支持模拟和委托。
  • 支持 SSPI 加密。
HttpChannel

HttpChannel 类使用 SOAP 协议在远程对象之间传输消息。所有消息都通过 SoapFormatter 传递,此格式化程序会将消息转换为 XML 并进行序列化,同时向数据流中添加所需的 SOAP 标头。如果还指定了二进制格式化程序,则会创建二进制数据流。随后,将使用 HTTP 协议将数据流传输至目标 URI。

HttpChannel 符合 SOAP 1.1 标准,它执行下列功能:

  • 通过将 HTTP 协议用作传输在发送方和接收方之间通信。
  • 支持以 SOAP(一种 XML 编码标准)和二进制格式编码负载。
  • 将接收方设置为通过 ASP.NET 和 TCP 套接字接收 HTTP 请求并发送 HTTP 响应。
  • 生成并使用对象引用的 ChannelDataStore。
  • 支持模拟和委托。
  • 支持 SSPI 加密。

下面贴代码:

1.定义远程对象

using System;using System.Runtime.Remoting.Metadata;namespace MessageMarshal{ ???/*创建发送消息委托*/ ???public delegate void SendMessageHandler(string messge); ???[Serializable] ???public class TestMessageMarshal : MarshalByRefObject ???{ ???????private Guid ID { get; set; } ???????/*新建对象实例时重新创建标识编号*/ ???????public TestMessageMarshal() ???????{ ???????????ID = Guid.NewGuid(); ???????} ???????/*创建发送消息事件*/ ???????public static event SendMessageHandler SendMessageEvent; ???????/*发送消息*/ ???????[SoapMethod(XmlNamespace = "MessageMarshal", SoapAction = "MessageMarshal#SendMessage")] ???????public void SendMessage(string messge) ???????{ ???????????if (SendMessageEvent != null) ???????????????SendMessageEvent(ID.ToString() + "\t" + messge); ???????} ???}}

2.定义服务端

using System;using System.Runtime.Remoting;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Tcp;namespace TestRemotingServer{ ???public class Program ???{ ???????static void Main(string[] args) ???????{ ???????????Console.WriteLine("创建HTTP通道"); ???????????/*创建HTTP通道*/ ???????????TcpChannel channel = new TcpChannel(816); ???????????/*注册通道服务端*/ ???????????ChannelServices.RegisterChannel(channel, false); ???????????RemotingConfiguration.ApplicationName = "test"; ???????????/*服务端注册,使用SingleCall激活*/ ???????????RemotingConfiguration.RegisterActivatedServiceType(typeof(MessageMarshal.TestMessageMarshal)); ???????????Console.WriteLine("started ..."); ????????????/*接收客户端事件*/ ???????????MessageMarshal.TestMessageMarshal.SendMessageEvent += new MessageMarshal.SendMessageHandler(TestMessageMarshal_SendMessageEvent); ???????????Console.Read(); ???????} ???????static void TestMessageMarshal_SendMessageEvent(string messge) ???????{ ???????????Console.WriteLine(messge); ???????} ???}}

3.定义客户端:

using System;using System.Runtime.Remoting;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Tcp;using System.Threading;namespace TestRemotingClient{ ???class Program ???{ ???????static void Main(string[] args) ???????{ ???????????/*创建通道*/ ???????????TcpChannel channel = new TcpChannel(); ???????????/*注册通道*/ ???????????ChannelServices.RegisterChannel(channel, false); ???????????/*注册通道 的 远程处理类型*/ ???????????RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "tcp://localhost:816/test"); ???????????/*创建消息实体*/ ???????????MessageMarshal.TestMessageMarshal TestMessage = new MessageMarshal.TestMessageMarshal(); ???????????while (true) ???????????{ ???????????????TestMessage.SendMessage("DateTime.Now:" + System.DateTime.Now.ToString()); ???????????????Console.WriteLine("send message..."); ???????????????Thread.Sleep(2000); ???????????} ???????} ???}}

4.测试

.NET Remoting 咱只写三篇 应该能给大家带来些了解,应对面试

作者:释迦苦僧 出处:http://www.cnblogs.com/woxpp/p/3997984.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

【转载】.NET Remoting学习笔记(三)信道

原文地址:http://www.cnblogs.com/bad-man/p/7798966.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved