我们遇到了WCF Routing Services 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解决方案,并添加了一个名为CalculatorServiceIis的IIS托管版本的CalculatorService。
我将解决方案文件和Word文件“DescribedIssue.docx”下载到https://rapidshare.com/files/3527502127/ProtocolBridgingIssue.zip。你可以在那里找到如何重现这个问题的完整描述。