happmaoo 发表于 2013-1-28 20:29:09

.Net Remoting中Remote Server的Port占用/释放问题

<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe><div class="postText"><div class="postText"><iframe align="right" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog02.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>这一问题一般出现在Console application/Windows Service承载Remote Objects时,要求Remote Server指定特定port。IIS在承载Remote Objects并不需要指定特定port,因此一般不会出现SocketException异常信息。



1. 启动承载Remote Objects的Console application,发现指定的port状态为:LISTENING。

显然Remote Server开始监听该port,可以接受Client端的请求。



2. 在关闭承载Remote Objects的Console application后,发现指定的port状态为:TIME_WAIT。



如果现在启动该Console application,就会抛出如下异常:

An unhandled exception of type 'System.Runtime.Remoting.RemotingException' occurred in mscorlib.dll



Additional information: Remoting configuration failed with the exception System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port)

is normally permitted



SocketException异常:每一个socket address (protocol/network address/port)只能有一个使用。



3. 个人观点

关于TIME_WAIT状态,这是windows系统设计的,防止来自旧的连接(old connection)的剩余packets干扰新的连接(new connection)。因此,默认会等待4分钟,让那些剩余的packets丢弃掉。



因此,不要试图去解决这一问题。等待4分钟左右的时间,确认该port确定已释放,再启动Remote Server,如Console application/Windows Service等。



不同观点或意见,请发表评论或指出。谢谢。
页: [1]
查看完整版本: .Net Remoting中Remote Server的Port占用/释放问题