目录

参考:♂风车车.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; /*code 释迦苦僧*/
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.Http;
using System.Runtime.Remoting.Channels.Ipc;
using System.Runtime.Remoting.Channels.Tcp;
using MessageMarshal; namespace TestRemotingServer
{
/*code:释迦苦僧*/
class Program
{
static void Main(string[] args)
{
//IpcChannel channel_ipc = new IpcChannel("localhost:8226");
//HttpChannel channel_http = new HttpChannel(8226);
TcpChannel channel_tcp = new TcpChannel(); /*注册通道服务端*/
ChannelServices.RegisterChannel(channel_tcp, false);
RemotingConfiguration.ApplicationName = "test";
RemotingConfiguration.RegisterActivatedServiceType(typeof(TestMessageMarshal));
Console.WriteLine("started ...");
/*接收客户端事件*/
TestMessageMarshal.SendMessageEvent+=new 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.Http;
using System.Runtime.Remoting.Channels.Ipc;
using System.Runtime.Remoting.Channels.Tcp;
using System.Threading; /*code 释迦苦僧*/
namespace TestRemotingClient
{
class Program
{
static void Main(string[] args)
{
//IpcChannel channel = new IpcChannel();
//HttpChannel channel_http = new HttpChannel();
TcpChannel channel_tcp = new TcpChannel();
ChannelServices.RegisterChannel(channel_tcp, false);
/*注册通道 的 远程处理类型*/
//RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "ipc://localhost:8226/test");
//RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "http://localhost:8226/test");
RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "tcp://localhost:8226/test");
/*创建消息实体*/
MessageMarshal.TestMessageMarshal TestMessage = new MessageMarshal.TestMessageMarshal();
while (true)
{
TestMessage.SendMessage("DateTime.Now:" + System.DateTime.Now.ToString());
Console.WriteLine("send message...");
Thread.Sleep();
}
}
}
}

4.测试

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

作者:释迦苦僧 出处:http://www.cnblogs.com/woxpp/p/3997984.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

.NET Remoting学习笔记(三)信道的更多相关文章

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

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:♂风车车.Net .NET Framework ...

  2. .NET Remoting学习笔记(二)激活方式

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科  ♂风车车.Net 激活方式概念 在 ...

  3. .NET Remoting学习笔记(一)概念

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 背景 自接触编程以来,一直听过这个名词Remotin ...

  4. 【转载】.NET Remoting学习笔记(二)激活方式

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:百度百科 ♂风车车.Net 激活方式概念 在访 ...

  5. 【转载】.NET Remoting学习笔记(一)概念

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 背景 自接触编程以来,一直听过这个名词Remotin ...

  6. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  7. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  8. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  9. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

随机推荐

  1. Android常见崩溃或闪退的问题描述及原因总结、及与性能相关的模块——持续更新

    1.nullpointer——就是使用一个对象的时候还没有对其进行初始化导致该问题 一般在何种情况下容易出现呢? (1)父窗口+子窗口同时出现的,父窗口因为某种原因消掉了,子窗口还在,操作子窗口找不到 ...

  2. HTML5和CSS3基础教程(第8版)-读书笔记(4)

    第16章 表单 表单有两个基本组成部分:访问者在页面上可以看见并填写的控件.标签和按钮的集合:以及用于获取信息并将其转化为可以读取或计算的格式的处理脚本. 基本的表单字段类型包括文本框.单选按钮.复选 ...

  3. SAP 常用函数

    1. 访问本地 或别的服务器上文件 函数 CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE       EXPORTING         DOCUME ...

  4. Python学习笔记-Day5

    冒泡算法: 实现1: a = [,,,,,,,,,,,,,,] def bubble(badlist): sort = False while not sort: sort = True ): ]: ...

  5. iOS从不同页面跳转回到指定控制器

    HomeViewController *homeVC = [[HomeViewController alloc] init]; UIViewController *target = nil; for ...

  6. PHP查看当前端口号

    <?php echo "当前页面服务器IP地址为:"; echo $_SERVER["SERVER_ADDR"]; echo "<br / ...

  7. 新建MMS草稿保存后,再进入草稿修改收件人,退出到会话界面,会显示两条草稿

    分析原因:新建彩信草稿,保存后,再打开草稿,修改收件人,再保存会产生新的threadId, 而之前保存的草稿theadId还存在,导致此问题. (必现. 解决方法:将原来的Thread_id和新的收件 ...

  8. [转载]PHP 5.6 on CentOS/RHEL 7.0 and 6.6 via Yum

    https://webtatic.com/packages/php56/ PHP 5.6.5 has been released on PHP.net on 22nd January 2014, an ...

  9. 让HTML5语义化标签兼容IE浏览器

    解决方案:IE9以下旧版本浏览器不支持新的语义化标签.其中一种解决方案就是用js将HTML5增加的标签创建出来,就像下面这样.(放在header部位) <script> var html5 ...

  10. [转]oracle 10g数据泵之impdp-同时导入多个文件

    要了解impdp,请先了解导出,我之前作过导出的笔记:oracle 10g数据泵之expdp.这两个笔记也许只对程序员有用,通常用于把正式区的数据导入到测试区,对数据库管理员也许帮助不大,他们使用这些 ...