.Net Remoting中Remote Server的Port占用/释放问题
这一问题一般出现在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等。
不同观点或意见,请发表评论或指出。谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?