#wcf #timeoutexception
#wcf #исключение timeoutexception
Вопрос:
У нас есть метод службы WCF (синхронный), который вызывает другой процесс (через COM) для выполнения некоторых действий. Теперь этот COM-процесс занимает около 10-15 секунд для завершения, а затем возвращает вызов моей службе, которая, в свою очередь, должна быть возвращена клиенту.
На стороне клиента WCF у нас время отправки установлено равным 5 секундам, поэтому через 5 секунд мы получаем исключение тайм-аута на клиенте.
Теперь мой вопрос заключается в том, что происходит на стороне службы после того, как клиент получает исключение тайм-аута. Поскольку вызов COM-процесса все еще выполняется и может вернуться в службу еще через 5-10 секунд, как служба обрабатывает этот сценарий.
Дайте мне знать, требуется ли дальнейший ввод.
С уважением,
Ответ №1:
Afaik, на стороне клиента генерируется исключение, но служба продолжает операцию. Если у вас выполняются длительные операции, вы можете проверить асинхронные вызовы.
Обновить:Если это невозможно и увеличение тайм-аута не является вариантом по той же причине, я не вижу, как вы можете избежать исключения тайм-аута. Некоторые способы восстановления:
-
Если вы хотите прервать работу сервера по тайм-ауту клиента, вы могли бы добавить служебную операцию, подобную
CancelCOMCall
, и вызвать из клиента, когда он перехватитTimeoutException
, что приведет к остановке COM-процесса. -
Если вы хотите завершить операцию, но предотвратить повторяющиеся вызовы от клиента (вызванные повторными попытками после исключения тайм-аута), вы можете сохранить, какие COM-операции выполняются для каждого клиента, и отменить вызовы для уже запущенных процессов.
Я бы согласился, что ни один из методов не является очень аккуратным, но мне это кажется немного сложным без асинхронных вызовов. Однако я не эксперт по WCF.
Комментарии:
1. Что ж, я понимаю вашу точку зрения относительно асинхронных вызовов, но, к сожалению, вызовы служб не могут выполняться асинхронно (из-за некоторой спецификации / стандарта, которому мы следуем).