Привет всем. Пару вечеров убил на элементарной настройке WCF клиент-сервера, надеюсь на помощь зала ...
При длительной (более 30 мин.) работе сервера, клиент получает ошибку timeot-а, хотя в конфиге было receiveTimeot="2:0:0" (прочие timeot-ы добавил в процессе поисков решения)! Откуда WCF берет эти "0:30:0" — не могу понять ((. Отладка с такими задержками занимает много времени, и я решил пойти другим путем : установил малые значения timeot-ов, но по их истечении клиент продолжает работать, а после тех же 30-ти мин. вылетает исключение ((.
var factory = new System.ServiceModel.ChannelFactory<TContract>(this.CurrentValue);
где
this.CurrentValue = "tcp_local";
Сервис хостится на WinForm-приложении.
Заранее благодарен любым мыслям по этому поводу.
ЗЫ
Набросал тестовое приложение по всем канонам MSDN (т.е. импортировал сервис мастером, без общей библиотеки) с привязкой к basicHttpBinding — указанных недостатков не обнаружил ...
Здравствуйте, Programmer75, Вы писали:
P>Набросал тестовое приложение по всем канонам MSDN (т.е. импортировал сервис мастером, без общей библиотеки) с привязкой к basicHttpBinding — указанных недостатков не обнаружил ...
А что в тексте исключения? Wcf обычно пишет что-то типа "did not receive a reply within the configured timeout" с указанием таймаута.
Ну и классика — подключаемся отладчиком, останавливаемся в момент броска исключения и смотрим по locals, что пошло не так. Вот неплохая вводная статья.
Правило номер 0, которое я уже ни раз писал на этом форуме -- включите логи WCF, и настройте логгирование по максимуму. И будет Вам полная инф-ия об ошибке.
P>При длительной (более 30 мин.) работе сервера, клиент получает ошибку timeot-а, хотя в конфиге было receiveTimeot="2:0:0"
Вот неплохой тред на SO по receiveTimeot, и оттуда же еще одна хорошая ссылка.
Здравствуйте, Sharov, Вы писали:
S>Вот неплохой тред на SO по receiveTimeot, и оттуда же еще одна хорошая ссылка.
А толку-то? У топикстартера 30 минут таймаут, все стандартные, насколько помню 1 и 10 минут. Такое впечатление, что таймаут где-то втихую переопределяется.
Здравствуйте, Sinix, Вы писали:
S>А толку-то? У топикстартера 30 минут таймаут, все стандартные, насколько помню 1 и 10 минут. Такое впечатление, что таймаут где-то втихую переопределяется.
Как я уже писал, ТС по уму надо логи врубить и все. Ждать падения. А приведенная информация больше для размышления и понимание что к чему.
Здравствуйте, Sharov, Вы писали:
S>Правило номер 0, которое я уже ни раз писал на этом форуме -- включите логи WCF, и настройте логгирование по максимуму. И будет Вам полная инф-ия об ошибке.
Я не использую IIS. Сервис хостится на WinForm-приложении. Или я что-то недопонимаю о логировании WCF?
S>Вот неплохой тред на SO по receiveTimeot, и оттуда же еще одна хорошая ссылка.
За ссылки спасибо. Оказалось, что я неправильно для себя понимал назначения sendTimeout и receiveTimeout.
Здравствуйте, Sinix, Вы писали:
S>А что в тексте исключения? Wcf обычно пишет что-то типа "did not receive a reply within the configured timeout" с указанием таймаута.
На клиенте receiveTimeout="0:2:0" sendTimeout="0:2:0" openTimeout="0:0:10" closeTimeout="0:0:10". На сервере стояла задержка данных 35 мин. Исключение на клиенте появилось спустя 30 мин. Его содержание :
System.TimeoutException: The request channel timed out while waiting for a reply after 00:30:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout. ---> System.TimeoutException: The socket transfer timed out after 00:30:00. You have exceeded the timeout set on your binding. The time allotted to this operation may have been a portion of a longer timeout. ---> System.Net.Sockets.SocketException: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера
S>Ну и классика — подключаемся отладчиком, останавливаемся в момент броска исключения и смотрим по locals, что пошло не так. Вот неплохая вводная статья.
Почитаю, может поможет в чем-то ...
Здравствуйте, Programmer75, Вы писали:
S>>Правило номер 0, которое я уже ни раз писал на этом форуме -- включите логи WCF, и настройте логгирование по максимуму. И будет Вам полная инф-ия об ошибке. P>Я не использую IIS. Сервис хостится на WinForm-приложении. Или я что-то недопонимаю о логировании WCF?
IIS вообще не причем, от слова совсем. Tracing and Message Logging и Service Trace Viewer Tool. Логгер можно настроить в стандартной утилите svcconfigчегототам.exe
P>За ссылки спасибо. Оказалось, что я неправильно для себя понимал назначения sendTimeout и receiveTimeout.
Угу, тоже самое было. Поэтому и посчитал, что будет полезно ознакомиться.
Здравствуйте, Programmer75, Вы писали:
P>Привет всем. Пару вечеров убил на элементарной настройке WCF клиент-сервера, надеюсь на помощь зала ...
P>При длительной (более 30 мин.) работе сервера, клиент получает ошибку timeot-а, хотя в конфиге было receiveTimeot="2:0:0" (прочие timeot-ы добавил в процессе поисков решения)! Откуда WCF берет эти "0:30:0" — не могу понять ((. Отладка с такими задержками занимает много времени, и я решил пойти другим путем : установил малые значения timeot-ов, но по их истечении клиент продолжает работать, а после тех же 30-ти мин. вылетает исключение ((.
P> ...
P>Сервис хостится на WinForm-приложении.
P>Заранее благодарен любым мыслям по этому поводу.
P>ЗЫ P>Набросал тестовое приложение по всем канонам MSDN (т.е. импортировал сервис мастером, без общей библиотеки) с привязкой к basicHttpBinding — указанных недостатков не обнаружил ...
Проблема решена:
После создания фабрикой IContextChannel, ему в коде жестко присваивался OperationTimeout = 30 мин.
Всем спасибо. У Всех прошу прощения за отнятое время.