WCF получает тайм-аут - PullRequest
       1

WCF получает тайм-аут

1 голос
/ 28 июня 2010

При попытке подключения / связи с моей службой мне приходится ждать почти ровно 20 секунд каждый раз, прежде чем сработает исключение. Поскольку все это будет работать в локальной сети, я хотел бы уменьшить этот тайм-аут до 5 секунд? Я попытался уменьшить receiveTimeout на моем клиенте, но это не сработало. Я просмотрел весь код на наличие 20-секундной переменной, но не смог ее найти. Что я должен изменить?

Ответы [ 2 ]

2 голосов
/ 28 июня 2010

Существуют разные настройки тайм-аута http://msdn.microsoft.com/en-us/library/ms731078.aspx. Они могут быть установлены, например, в файле конфигурации (web.config или app.config), см. http://msdn.microsoft.com/en-us/library/ms731343.aspx в качестве примера.В http://msdn.microsoft.com/en-us/library/ms731399.aspx вы можете выбрать используемую привязку и установить соответствующую настройку.

ОБНОВЛЕНО : Вероятно, время ожидания установлено на уровне TCP.Попробуйте уменьшить в реестре параметры TcpMaxConnectRetransmissions (значение по умолчанию 2) или TcpInitialRTT (значение по умолчанию 3, в NT 4.0 у параметра есть имя InitialRTT), перезагрузите компьютер и повторите эксперименты.О влиянии 21 секунды вы можете прочитать в http://support.microsoft.com/kb/223450, http://support.microsoft.com/kb/175523, http://support.microsoft.com/kb/170359 или http://www.boyce.us/windows/tipcontent.asp?ID=189. Описание значений конфигурации TCP / IP по умолчанию можно прочитать на http://support.microsoft.com/kb/314053 (для Windows XP) и http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx (для Windows Server 2003 с пакетом обновления 2).

1 голос
/ 19 февраля 2011

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

Однако, если ваш сайт был выгружен (домен приложения и рабочий процесс), может потребоваться 20 секунд, чтобы перейти к коду, который создает канал для вашего сервиса.Так что это может быть чем-то замаскированным.

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

Чтобы несколько облегчить это, вы можете использовать сервис keepalive / ping.Что-то, что просто постоянно попадает в URL, чтобы сохранить домен приложения в памяти и рабочий процесс живым (если не общим).По умолчанию IIS 6 отключает рабочий процесс после 20 минут бездействия, поэтому при поступлении первого запроса http.sys запускает новый рабочий процесс, который загружает платформу, которая загружает ваше приложение, и запускает конвейер, который выполняетваш код, который доставляет вашему пользователю.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...