Подтвердить что ты не робот

Ошибка слишком загруженной службы в WCF

Я периодически получаю следующее исключение в своей службе .Net WCF. "HTTP-служба, расположенная в http://MyServer/TestWCF/MyService.svc, слишком занята."

Я что-то пропустил?

Я использую базовую привязку 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>

Помогите решить проблему? Кроме того, могу ли я узнать рекомендуемые значения параметров для дросселирования для веб-сайта с высоким трафиком?

4b9b3361

Ответ 1

Вы могли бы определенно попытаться увеличить maxConcurrentSessions и maxConcurrentCalls в своем режиме дросселирования обслуживания до стандартных значений 30 или около того и посмотреть, исчезла ли эта ошибка. Сервер слишком занят, казалось бы, указывает на то, что больше запросов появилось, чем область, разрешенная вашим режимом дросселирования вашего сервиса, и они были отброшены, поскольку экземпляр службы не стал доступен для обслуживания в течение заданного периода ожидания.

Ответ 2

Мой ответ будет, проверьте, есть ли пул приложений и хорошо?

Я видел эту ошибку, возникающую, когда пул приложений умер из-за того, что выбрасываются исключения, которые не были обнаружены.

Рассмотрим, например, пользовательские разделы конфигурации - с ошибкой там, приведет к сбою вашего приложения до его начала. Слишком много из них за короткий промежуток времени убьет пул приложений.

Ответ 3

Если вы используете службу под своей учетной записью (Identity), вполне возможно, что вы недавно изменили свой пароль - вам понадобится reset для своего пула приложений IIS в разделе "Дополнительные параметры" | Диалоговое окно "Идентификация".

Ответ 4

Это не только maxConcurrentSessions, но и продолжительность сеанса.

Если клиент не закрывает соединение, он будет оставаться открытым до тех пор, пока не истечет время ожидания. Затем вы можете поразить предел maxConcurrentSessions с очень небольшой активностью на сервере.

Ответ 5

Убедитесь, что вы также проверяете внутреннее исключение; во время развертывания мы отключили пул приложений веб-службы WCF, и клиенты запустили эту ошибку за это время:

System.ServiceModel.ServerTooBusyException: HTTP-сервис, расположенный в https://ourserver.x.com/path/service.svc, слишком занят. --- > System.Net.WebException: удаленный сервер ответил на ошибку: (503) Сервер недоступен.

Итак, в этом случае ошибка HTTP 503 (неверно?) интерпретируется как "сервер слишком занят".

Ответ 6

Единственным источником этого исключения, о котором я знаю, является то, что вы используете сеансы, и вам удастся нажать на рычаг MaxPendingChannels. Его значение по умолчанию - это что-то довольно низкое, например 4. Вы можете попробовать установить его выше (например, 128), или если вы просто хотите воспроизвести, установите его в 1, и вы увидите его под нагрузкой.

См. здесь дополнительную информацию о сеансах: http://msdn.microsoft.com/en-us/library/ms733795.aspx

Ответ 7

Я просто столкнулся с этой ошибкой, и это сводилось к простой проблеме с конфигурацией. У меня была услуга на том же порту и в том же интерфейсе (макет службы). Я запустил службу с помощью соответствующего переключателя командной строки для запуска "оригинального" сервиса, который я намеревался. Ошибка исчезла.

Ответ 8

Мое решение: проверить файл 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>