Я использую синхронную службу WCF, которая работает хорошо в 99% случаев, но в некоторых очень редких случаях клиент заканчивает работу до завершения обработки сервера. Есть ли способ обнаружить на стороне SERVER время ожидания клиента? Я мог бы использовать async-операцию, но в этом случае обнаружение тайм-аута на стороне сервера спасло бы мне довольно много работы. Я использую привязку net.tcp, если это имеет значение.Как определить исключение таймаута клиента на стороне сервера?
ответ
Для net.tcp, http и т. Д. Вообще нет. (см. комментарии выше для некоторых идей, а также может быть другим для других протоколов/привязок/и т. д.)
Причина в том, что код инфраструктуры WCF на стороне сервера не будет использовать канал до того, как он завершит выполнение код реализации служебной операции и сортировка ответа. Только тогда он попытается отправить ответ и в этот момент поймет, что соединение уже было прервано клиентом.
Когда сервер получает эту ошибку, код пользователя (ваша реализация служебной операции) уже выполнен и, следовательно, вы больше не можете реагировать на это. Возможно, это возможно из диспетчера или другой точки распространения, но лично я не пробовал. Однако это также не спасет ваш сервер от ненужной работы, потому что, как сказано, отключение клиента будет по-прежнему распознаваться только тогда, когда сервер действительно пытается отправить ответ.
Одним из «простых» способов устранения таких проблем может быть разделение выполняемой работы на несколько служебных операций/вызовов (если это вообще возможно, а не случайное введение состояния на стороне сервера в процессе). Или, как говорили другие, попросите клиента реализовать интерфейс «Ping», который сервер может использовать, чтобы проверить, остается ли клиент «живым», и ответ по-прежнему необходим.
- 1. На стороне сервера и на стороне клиента
- 2. Как определить длину буфера на стороне клиента
- 3. Программирование на стороне клиента на стороне клиента и сервера
- 4. На стороне клиента или стороне сервера PhantomJS?
- 5. Как принять исключение SoapException на стороне клиента
- 6. Отключение aspxgridviews на стороне сервера, как обращаться на стороне клиента?
- 7. Как проверить кнопку на стороне сервера и на стороне клиента?
- 8. Коллекции метеоритов на стороне сервера не видны на стороне клиента
- 9. Способ распознавания клиента на стороне сервера
- 10. рендеринг на стороне сервера и рендеринг на стороне клиента ReactJs
- 11. ValidateRegExp на стороне клиента на стороне сервера вопрос
- 12. Вызов на стороне клиента на стороне сервера Thru Button Command
- 13. Проверка проверки на стороне клиента завершена/сбой на стороне сервера
- 14. Проверка на стороне сервера в asp.net bootstrap на стороне клиента
- 15. Метеор на стороне клиента и Express на стороне сервера
- 16. Проверка Ajax-инструментария на стороне сервера или на стороне клиента?
- 17. Логика на стороне клиента ИЛИ логика на стороне сервера?
- 18. Распределенная система: взломать ошибку на стороне сервера на стороне клиента
- 19. Silverlight Game Logic на стороне клиента или на стороне сервера?
- 20. Выполняет ли sendRedirect() на стороне клиента или на стороне сервера?
- 21. Сбой на стороне сервера на стороне клиента Javascript Crashes
- 22. Отличия в валидаторе на стороне сервера/на стороне клиента
- 23. Предупреждения на стороне сервера для приложения на стороне клиента
- 24. Обработка на стороне клиента или на стороне сервера?
- 25. Передача переменных (на стороне сервера/на стороне клиента) узел JS
- 26. ValidationSummary с проверкой на стороне клиента и на стороне сервера
- 27. Meteor HTTP.call undefined на стороне клиента, работающий на стороне сервера
- 28. Проверка на стороне сервера, уведомление на стороне клиента?
- 29. MonoRail - проверка на стороне сервера или на стороне клиента
- 30. Сценарии на стороне клиента для DataTables Сценарии на стороне сервера
Async не изменит время работы тайм-аутов. – usr
Операции async WCF не имеют возвращаемых значений и не ждут завершения операции на стороне сервера. Мои тайм-ауты происходят из-за (случайной) длительной обработки на стороне сервера, без проблем с сетью. Таким образом, операция async решит эту проблему, но я ищу другое решение. –
Когда вы говорите «асинхронный» WCF, вы говорите об операциях «async/await» или OneWay? Из вашего комментария это звучит как операции OneWay. Что касается обнаружения тайм-аута на клиенте, я не уверен, что вы могли бы, так как это было на стороне клиента. Сервер должен будет каким-то образом опросить клиента, чтобы убедиться, что он все еще встал - возможно, двусторонняя привязка. – Tim