我在.Net WCF服务中间歇性地获得以下异常。 “位于http://MyServer/TestWCF/MyService.svc的HTTP服务太忙了。”
我在这里错过了什么吗?
使用基本的http绑定并启用了WCF限制。
<basicHttpBinding>
<binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-16" sendTimeout="00:01:00" >
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="163840000"
maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" />
</binding>
。 。 。
<behavior name="MyWCFServices.MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="2147483647"
maxConcurrentSessions="10"/>
</behavior>
限制有助于解决问题吗? 另外,我可以知道高流量网站的限制推荐参数值吗?
答案 0 :(得分:10)
您绝对可以尝试将服务限制行为中的maxConcurrentSessions
和maxConcurrentCalls
增加到标准值30左右,看看是否会导致错误消失。服务器太忙似乎表明更多的请求已经进入,而不是服务限制行为允许的区域,并且它们已被丢弃,因为在给定的超时时间内没有服务实例可用于服务它们。
答案 1 :(得分:9)
我的答案是,检查应用程序池是否正常运行?
我已经看到当应用程序池由于未被捕获的异常而死亡时发生此错误。
例如,考虑自定义配置部分 - 在那里出现错误,将导致您的应用在启动之前失败。在很短的时间内,太多这些会杀死应用程序池。
答案 2 :(得分:4)
如果您的服务正在您的帐户下运行(身份),您很可能最近更改了密码 - 您需要在高级设置中为其IIS应用程序池重置密码。身份对话框。
答案 3 :(得分:2)
这不仅仅是maxConcurrentSessions,也是会话持续的时间。
如果客户端没有关闭连接,它将保持打开状态直到超时。然后,您可以在服务器上执行非常少的活动时达到maxConcurrentSessions限制。
答案 4 :(得分:2)
确保你也检查内部异常;在我们的部署期间,我们禁用了WCF Web服务的应用程序池,并且客户端在此期间开始收到此错误:
System.ServiceModel.ServerTooBusyException:位于https://ourserver.x.com/path/service.svc的HTTP服务太忙了。 ---&GT; System.Net.WebException:远程服务器返回错误:(503)服务器不可用。
因此,在这种情况下,HTTP错误503被(错误?)解释为&#34;服务器太忙&#34;。
答案 5 :(得分:1)
我所知道的这个异常的唯一来源是你正在使用会话,并设法达到MaxPendingChannels限制。它的默认值非常低,如4.您可以尝试将其设置得更高(例如128),或者如果您只想重新设置,请将其设置为1,您应该在负载测试下看到它。
有关会话的详情,请参阅此处:http://msdn.microsoft.com/en-us/library/ms733795.aspx
答案 6 :(得分:1)
我刚遇到这个错误,它归结为一个简单的配置问题。我在完全相同的端口和相同的接口(模拟服务)上获得了服务。我使用适当的命令行开关运行该服务以运行我想要的“原始”服务。错误消失了。
答案 7 :(得分:0)
我的解决方案是,检查App.Config文件,该服务标签是否适用于此特定服务。
例如:
<service name="MyServices.ServiceName">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="TestBinding" contract="MyServices.ServiceName">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyServices/ServiceName/" />
</baseAddresses>
</host>
</service>