我们遇到了 WCF 路由服务 4.0 问题。我们正在做从 http 到 net.tcp 的协议桥接,我们的 net.tcp WCF 服务托管在 AppFabric 1.1 内的 IIS 7.5 中。此问题发生在 Windows 7 开发盒和 Windows 2008 R2 服务器上。问题是,在 IIS ApplicationPool 回收或 ApplicationPool 停止路由服务上的 System.ObjectDisposedException 之后,在下一次调用路由服务时,它将抛出 System.ServiceModel.ProtocolException:此通道不能再用于发送消息为由于服务器启动的关闭,输出会话自动关闭。通过将 DispatchRuntime.AutomaticInputSessionShutdown 设置为 false 来禁用自动关闭,或者考虑使用远程服务器修改关闭协议。
此时,无法通过路由服务进行所有进一步的调用。奇怪的是,如果通过 net.tcp 公开的 WCF 服务是自托管的,则不会出现此问题。因此,如果您关闭托管 WCF 服务的控制台主机,然后再次打开它,路由服务将再次运行。在通过 net.tcp 绑定公开的 IIS 托管 WCF 服务的情况下,此恢复缺失。
为了重现此问题,我们从http://msdn.microsoft.com/en-us/vs2010trainingcourse_whatsnewinwcf4_topic17.aspx获取了 Ex8-ProtocolBridging 解决方案,并添加了一个 IIS 托管版本的 CalculatorService,称为 CalculatorServiceIis。
我将解决方案文件和 Word 文件“DescribedIssue.docx”下载到https://rapidshare.com/files/3527502127/ProtocolBridgingIssue.zip。您可以在那里找到如何重现该问题的完整描述。