Я недавно тестировал техническую службу 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.
Может ли кто-нибудь помочь мне получить более ясную картину и помочь мне с некоторыми дополнительными знаниями сделать что-то более полное?