30

我在 .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>

节流有助于解决问题吗?另外,我可以知道为高流量网站节流的推荐参数值吗?

4

8 回答 8

10

您绝对可以尝试将您的服务限制行为增加到 30maxConcurrentSessions左右maxConcurrentCalls的标准值,看看这是否会使错误消失。服务器太忙似乎表明进入的请求多于您的服务限制行为所允许的区域,并且由于在给定的超时期限内没有服务实例可用于为它们提供服务,因此它们已被丢弃。

于 2009-05-23T08:46:52.717 回答
9

我的回答是,检查应用程序池是否正常?

我已经看到当应用程序池由于未捕获的异常而死亡时发生此错误。

例如,考虑自定义配置部分 - 那里有错误,将导致您的应用程序在启动之前失败。在很短的时间内太多这些会杀死应用程序池。

于 2011-10-17T16:26:51.217 回答
4

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

于 2012-04-30T20:19:57.993 回答
2

确保您也检查内部异常;在我们的部署过程中,我们禁用了 WCF Web 服务的应用程序池,并且客户端在此期间开始收到此错误:

System.ServiceModel.ServerTooBusyException:位于https://ourserver.x.com/path/service.svc的 HTTP 服务太忙。---> System.Net.WebException:远程服务器返回错误:(503)服务器不可用。

因此,在这种情况下,HTTP 错误 503 被(错误?)解释为“服务器太忙”。

于 2014-06-25T14:33:42.583 回答
2

不仅仅是 maxConcurrentSessions,还有会话持续多长时间。

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

于 2009-06-23T19:58:25.883 回答
1

我知道这个异常的唯一来源是如果您正在使用会话,并且您设法达到 MaxPendingChannels 油门。它的默认值非常低,例如 4。您可以尝试将其设置得更高(例如 128),或者如果您只是想重现,请将其设置为 1,您应该会在负载测试中看到它。

有关会话的更多信息,请参见此处:http: //msdn.microsoft.com/en-us/library/ms733795.aspx

于 2011-04-16T23:02:37.607 回答
1

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

于 2012-05-17T21:25:37.077 回答
1

我的解决方案是,检查 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>
于 2014-02-01T04:44:57.403 回答