.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了:

 

if (ChannelServices.RegisteredChannels.GetLength(0> 0)
{
    
foreach (IChannel channel in ChannelServices.RegisteredChannels)
    
{
        ChannelServices.UnregisterChannel(channel);
    }

}


//再注册新通道;
TcpChannel newChannel = new TcpChannel(8080);
//


 


 

posted @ 2011-02-18 17:40  pjh123  阅读(239)  评论(1编辑  收藏  举报