Недавно я технически тестировал службу 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, и я заметил количество текущих запросов минус (В очереди + Отключено) = 12. Что означает, что мы используем 1 ядро? и количество потоков на этом ядре установлено равным 12.
Может ли кто-нибудь помочь мне получить более четкую картину и помочь объединить мои знания с некоторыми дополнительными сведениями в нечто более полное?
InstanceContextMode
, установленный наSingle
? - person Ladislav Mrnka   schedule 20.10.2011InstanceContextMode
установлен вPerCall
- person TomEaton   schedule 24.10.2011