【发布时间】:2010-02-19 14:49:46
【问题描述】:
由于某种原因,在使用 IpcChannel 并将其关闭后,有时命名管道保持打开状态,并有一个线程在其上等待。我无法在调试环境中按需实现,但在我们的生产环境中每天会发生 5 到 10 次。这样做的坏影响是它阻止我卸载 appdomain,因为在命名管道上有一个线程无限等待(在本机方法中)......调用堆栈上没有框架在我的代码中 - 它是一个内部的 .网线。如果我启动进程资源管理器并找到打开并强制关闭它的命名管道句柄,那么一切都会再次变得愉快,appdomain 卸载正常。我可能做错了什么,因为我没有与 IpcChannels 一起工作过很多......我的服务器端代码在这里:http://pastebin.com/f6e2583b9 如果有人想偷看......这是完全运行修补 Server2003/.NET 2.0。
作为一个丑陋的解决方法,我想我会跟踪我创建的每个频道,然后定期检查以确保它们正确关闭,然后在 appdomain 卸载时,我将强制关闭任何悬空的管道....谁能指出我如何做到这一点的正确方向?我知道管道的名称....但我不确定如何检查它是否仍然打开,或者如何关闭任何现有的句柄...
【问题讨论】:
标签: c# .net serialization remoting named-pipes