.Net Remoting 2 (一个奇怪的错误)
现象描述如下:
1、服务端采用TcpServerChannel,通道名称默认(注:默认情况下系统会定义为'tcp')
2、客户端在程序启动时,注册一个通道,类型为TcpChannel,并且指定通道名称为'client'。然后客户端通GetObject
获得远程对象,并注册服务器端事件。
问题描述:
1、客户端非法关闭几次后,在客户端报异常"The channel 'tcp' is already registered."
在GetObject之前、之后进行更正,发现没
有"tcp"名称的通道存在。所以不清楚程序为什么会做出这样的提示。
但是跟踪当前客户端的所有通道,并没有发现名称为tcp的通道,只有一个名称为'client'的通道。但是在名称
为'client'的TcpChannel通道对象中,发现有两个成员_serverChannel和_clientChannel,它们的名称
都是"tcp"。
3、鉴于情况2,发现本机的服务器端通道是默认名称,也就是说服务器端通道名称也是"tcp",怀疑是与服务器端通道冲
突。
解决办法:
将服务器端通道设定名称后,好像异常不再出现。但具体原因不明。
补充说明:
以上描述的错误,在客户端并不是一直出现的,可能三四次后,就会报一次异常。
查看当前应用程序的所有通道的方法如下:
IChannel[] myIChannelArray = ChannelServices.RegisteredChannels;
for (int i=0; i<myIChannelArray.Length; i++)
{
Console.WriteLine("Name of Channel: {0}", myIChannelArray[i].ChannelName);
Console.WriteLine("Priority of Channel: {0}",
+myIChannelArray[i].ChannelPriority);
}
http://www.cnblogs.com/wayfarer/archive/2004/11/02/59577.html
今天我的同事使用Remoting注册一个新通道。奇怪的是,通道始终无法注册,总是报告异常“该通道已被占用”。我明白这个异常出现的原因,但不明白的是此时系统并未使用任何一个通道,为何会有这个异常呢?即使重新启动计算机也是如此,莫非有一个我们无法探测到的Remoting服务在顽强且隐匿的在吞噬着通道?无论是tcp通道和http通道均是如此,真是奇怪啊。
当然要解决这个问题是非常easy的,只需要在注册新通道前加上如下几行代码就OK了:
{
foreach (IChannel channel in ChannelServices.RegisteredChannels)
{
ChannelServices.UnregisterChannel(channel);
}
}
//再注册新通道;
TcpChannel newChannel = new TcpChannel(8080);
//