我的应用程序有一个可以在远程服务器上调用方法的HttpChannel。
现在,在应用程序中,我需要注册另一个在另一台服务器上调用另一个方法的HttpChannel。
但如果我取消注册第一个频道,则应用程序会失败。
如何让这两个远程控制台成功调用远程方法?
答案 0 :(得分:2)
我们有类似的情况,并决定只在需要时注册一个频道,然后在我们完成后立即取消注册它,类似于连接的ADO.NET的断开模型,获取数据,然后断开连接
- 频道是基于每个应用程序域注册的。单身 进程可以包含多个应用程序域。当一个过程结束时, 由它注册的所有频道都会被自动销毁。
- 频道 名称在应用程序域中必须是唯一的。例如, 因为默认通道有名称,要注册两个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通道可以有一个端口。在同一端口上不能有两个不同的通道。