.NET Remoting - 客户端上的多通道注册

时间:2012-03-28 21:26:53

标签: c# rmi remoting .net-remoting

我的应用程序有一个可以在远程服务器上调用方法的HttpChannel。

现在,在应用程序中,我需要注册另一个在另一台服务器上调用另一个方法的HttpChannel。

但如果我取消注册第一个频道,则应用程序会失败。

如何让这两个远程控制台成功调用远程方法?

1 个答案:

答案 0 :(得分:2)

我们有类似的情况,并决定只在需要时注册一个频道,然后在我们完成后立即取消注册它,类似于连接的ADO.NET的断开模型,获取数据,然后断开连接

根据documentation

  
      
  • 频道是基于每个应用程序域注册的。单身   进程可以包含多个应用程序域。当一个过程结束时,   由它注册的所有频道都会被自动销毁。
  •   
  • 频道   名称在应用程序域中必须是唯一的。例如,   因为默认通道有名称,要注册两个HttpChannel   在一个应用程序域中的对象,您必须更改其名称   注册之前的频道。以下C#代码示例   证明这一点。
  •   
 IDictionary prop = new Hashtable();
 prop["name"] = "http1";
 prop["port"] = "9001";
 ChannelServices.RegisterChannel(new HttpChannel(prop, null, null)); 
  
      
  • 您无法注册更多侦听特定端口的频道   不止一次。即使频道是在a上注册的   每个应用程序域的基础上,不同的应用程序域   同一台机器无法注册相同的通道   港口。
  •   
  • 如果您不确定端口是否可用,请使用0   (零)配置通道的端口和远程处理系统时   将为您选择一个可用的端口。
  •   
  • 客户可以与a进行通信   使用任何注册频道的远程对象。远程系统   确保远程对象在何时连接到右通道   客户端尝试连接到该对象。客户负责   在尝试之前调用ChannelServices.RegisterChannel   与远程对象通信。如果它需要回调函数,   客户必须注册一个频道和一个端口。
  •   

因此,Channel的名称必须在您的应用程序域中是唯一的,并且按照设计,一次只有一个http通道可以有一个端口。在同一端口上不能有两个不同的通道。