WCF中的服务太忙错误

WCF中的服务太忙错误,wcf,web-services,throttling,Wcf,Web Services,Throttling,我在.Net WCF服务中间歇性地遇到以下异常。 “位于的HTTP服务太忙。” 我是不是遗漏了什么 我正在使用基本http绑定,并已启用WCF限制 <basicHttpBinding> <binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-16"

我在.Net WCF服务中间歇性地遇到以下异常。 “位于的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>

。 . .


节流是否有助于解决问题?
另外,我可以知道高流量网站节流的建议参数值吗?

您完全可以尝试将服务节流行为中的
maxConcurrentSessions
maxConcurrentCalls
增加到30左右的标准值,看看这是否会消除错误。服务器太忙似乎表明传入的请求超过了服务限制行为所允许的范围,并且由于在给定的超时时间内没有可用的服务实例为它们提供服务,这些请求已被丢弃。

这不仅是maxConcurrentSessions,也是会话持续的时间


如果客户端不关闭连接,它将保持打开状态,直到超时。然后,您就可以在服务器上几乎没有活动的情况下达到maxConcurrentSessions限制。

我所知道的唯一异常来源是,如果您正在使用会话,并且您成功地达到了MaxPendingChannel限制,。它的默认值相当低,比如4。您可以尝试将其设置得更高(例如128),或者如果您只想重新编程,请将其设置为1,您应该可以在负载测试中看到它


有关会话的更多信息,请参见此处:

我的答案是,检查应用程序池是否正常运行

我见过当应用程序池由于抛出未捕获的异常而死亡时发生此错误


例如,考虑自定义配置部分——其中有一个错误,将导致应用程序在启动之前失败。在短时间内使用过多的密码将杀死应用程序池。

如果您的服务是在您的帐户(身份)下运行的,则很可能您最近更改了密码--您需要在“高级设置”的“身份”对话框中为其IIS应用程序池重置密码。

我刚刚遇到此错误,它归结为一个简单的配置问题。我在完全相同的端口和相同的接口上安装了一个服务(模拟服务)。我使用适当的命令行开关运行该服务,以运行我想要的“原始”服务。错误消失了。

我的解决方案是,检查App.Config文件,是否存在此特定服务的服务标签

例如:


确保也检查了内部异常;在部署期间,我们禁用WCF web服务的应用程序池,客户端在此期间开始出现此错误:

System.ServiceModel.ServerTooBusyException:位于的HTTP服务太忙。-->System.Net.WebException:远程服务器返回错误:(503)服务器不可用


因此,在本例中,HTTP错误503被(错误?)解释为“服务器太忙”。

感谢您的回答…我是否需要在客户端和服务器端web上启用限制。配置?此外,我想知道maxConcurrentInstances参数的建议值是多少?您好,Steve-无需在客户端处理此问题-这是一个仅限于服务器端的设置。至于maxConcurrentInstances:问问自己,您希望同时处理多少来自客户端的请求。5.10? 处理这个请求需要多长时间?一个好的起点可能是30,看看A)这是否有助于提高服务的响应速度,b)是否不会使服务器过载。在你看到它的行为后,根据需要调整。是的。。。在这里也检查一下实际上,客户端不应该使用using语句。清理应明确处理。有关更多详细信息,请参见。@Anthony,谢谢您的评论,我已删除了正在使用的部件。这是从2009年开始的,当时我还很年轻,不知道还有什么更好的:)@AntSwift:很多人都知道这一点,但都不这么做。先看看这个。它可能“看起来”正常,但如果您从manager停止应用程序池,您将无法重新启动它。为了让一切恢复正常,请在命令行中使用“net stop w3svc”然后使用“net start w3svc”。感谢您保存了我刚刚走出家门的理智。这对我来说是成功的!回收应用程序池和宾果+1这只是在生产环境中发生的。非常容易引起误解的错误消息,指示服务器正忙。喝倒采谢谢你指出这一点!
<behavior name="MyWCFServices.MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceThrottling
                    maxConcurrentCalls="16"
                    maxConcurrentInstances="2147483647"
                    maxConcurrentSessions="10"/>
        </behavior>
<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>