Как интегрируется служба WCF и IIS, какова архитектура и поток входящих запросов - PullRequest
0 голосов
/ 20 октября 2011

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

Мы проводим нагрузочное тестирование службы WCF, которая размещена на IIS7 на Windows Server 2008. Система, настроенная для отправки сообщений, фактически запускает их в приложении, являющемся biztalk. Затем Biztalk обрабатывает сообщения и отправляет их в конечную точку службы WCF. Служба WCF также использует .net 2.0 в своем пуле приложений (я полагаю, это означает, что на самом деле это может быть 3.0 или 3.5, так как это не были полные версии?

Мы генерируем 40 сообщений в течение секунд, и 90% из них становятся тайм-аутами из-за тайм-аута отправки на клиенте (biztalk). Сначала мы подумали, что это странно, потому что мы ожидали, что сначала будет срабатывать базовый тайм-аут получения HTTP-привязки сервера, но оказалось, что он был установлен на 10 минут, а тайм-аут на отправку клиента был установлен на 1 мин и 30 с.

Что я понимаю:

Службы WCF имеют файлы конфигурации, в которых есть поведение и привязки http. Конечная точка сервера, на которую мы отправляем сообщение XML, использует BasicHtppBindings: Тайм-ауты: открытие / закрытие составляет 1 минуту, отправка и получение - 10 минут. Время ожидания сервера, о котором мы знаем, на данный момент задействовано: sendtimeout: 1 минута.

Я понимаю, что архитектура WCF работает путем создания экземпляра фабрики каналов или хоста службы и создает стек каналов, который содержит поведения и параметры привязки из конфигурации в качестве каналов. Существует TransportAdaptor, который используется для перемещения сообщения XML после его обработки через стек каналов.

Из IIS я понимаю, что http.sys обрабатывает входящие запросы. Он передает запросы в рабочий процесс, а когда он занят, он помещает запросы в очередь режима ядра? Я так понимаю, есть некоторые настройки machine.config, которые можно установить для увеличения этой очереди / ограничения этой очереди?

Я также знаю о том, как превратить пул приложений в веб-сад, и я прочитал, что вы можете увеличить количество потоков на ядро ​​со значения по умолчанию, равного 12; это не нужно делать через настройки реестра или позже в .net изменения веб-конфигурации.

Я только что прочитал об InstanceContextMode и о том, как он может повлиять и на службу сервера ... Но я не уверен, что в этом случае установлено.

Мы записали несколько счетчиков производительности, .net, и я заметил, что количество текущих запросов минус (Queued + Disconnected) = 12. Что указывает на то, что мы используем 1 ядро? и число потоков на этом ядре установлено равным 12.

Может ли кто-нибудь помочь мне получить более ясную картину и помочь мне с некоторыми дополнительными знаниями сделать что-то более полное?

1 Ответ

0 голосов
/ 11 ноября 2011

Режим WCF имеет настройку газа.Вот пример (взято из msdn ):

  <service 
    name="Microsoft.WCF.Documentation.SampleService"
    behaviorConfiguration="Throttled" />

..... .....

<behaviors>
  <serviceBehaviors>
    <behavior  name="Throttled">
      <serviceThrottling 
        maxConcurrentCalls="1" 
        maxConcurrentSessions="1" 
        maxConcurrentInstances="1"/>
    </behavior>
  </serviceBehaviors>

По умолчанию (если не указано)), служба сокращена до 10 одновременных вызовов.

Я считаю, что разумная производственная настройка для клиентов с большими объемами, выполняющих короткие вызовы, больше похожа на 100. Конечно, это зависит от вашей реализации, но по умолчанию определенно снижает производительностьна моих тестовых и производственных системах.

...