我有一个从 WCF 托管站点 (IIS) 获取所有业务逻辑的 ASP.Net 网站。有时,后端 WCF 似乎冻结了,这使 Web 前端停止响应。我必须回收两个应用程序池才能使其再次工作。
- 最近这种情况更频繁地发生,可能是因为我们有越来越多的客户使用该网站。以前每月一次,现在每周一次。也许更多。
- 我们会在每次 SVC 调用后关闭连接。
- 回收池后在事件日志中收到错误消息
消息:System.ServiceModel.CommunicationException:接收到....../......BusinessServices.svc 的 HTTP 响应时发生错误。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关更多详细信息,请参阅服务器日志。---> System.Net.WebException:底层连接已关闭:接收时发生意外错误。---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭
- Web 应用程序的 Web.config:
<bindings> <wsHttpBinding> <binding name="WSHttpBinding_IBusinessServices" closeTimeout="00:31:00" openTimeout="00:31:00" receiveTimeout="00:10:00" sendTimeout="00:31:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="999" maxStringContentLength="2147483647" maxArrayLength="1638400" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="Message"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" /> </security> </binding> </wsHttpBinding> </bindings> <client> <endpoint address="http://localhost:8890/MyBusinessServices.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IBusinessServices" contract="MyBusinessServices.IBusinessServices" name="WSHttpBinding_IBusinessServices" /> </client>
WCF 服务的 Web.config,限制设置为 1500
......
<behavior name="AppServiceBehaviors"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> <serviceTimeouts transactionTimeout="00:15:00" /> <serviceThrottling maxConcurrentCalls="1500" maxConcurrentSessions="1500" maxConcurrentInstances="2147483647" /> </behavior> <behavior name=""> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> <dataContractSerializer maxItemsInObjectGraph="2147483647" /> </behavior> </serviceBehaviors> </behaviors>
这个问题是间歇性的,但它让我发疯。任何想法/建议表示赞赏。
埃里克