出于某种原因,在使用IpcChannel并关闭它之后,有时候namedpipe保持打开状态,同时线程正在等待它。我无法在调试环境中根据需要进行此操作,但在我们的生产环境中,它每天发生5到10次。这样做的坏处是,它阻止我卸载appdomain,因为有一个线程在命名管道上等待无限(在本地方法中)... callstack上没有框架在我的代码中 - 这是一个内部。网线。如果我启动进程资源管理器,并找到已打开并强行关闭它的命名管道句柄,那么它将再次变得快乐,appdomain会正常卸载。有可能我做错了什么,因为我还没有和IpcChannel一起工作过很多....我的服务器端代码在这里:http://pastebin.com/f6e2583b9如果有人想偷看....这是在完全修补的Server2003上运行/.NET 2.0。.NET IpcChannel无法正确清理?
作为一个丑陋的解决方法,我想我会跟踪我创建的每个通道,然后定期检查以确保它们正确关闭,然后在appdomain卸载,我将强制关闭所有剩下的管道挂....任何人都可以指出我在正确的方向,我怎么能做到这一点?我知道管道的名称....但我不知道如何检查它是否仍然打开,或如何关闭任何现有的手柄...