Поведение службы WCF при исключении тайм-аута

#wcf #timeoutexception

#wcf #исключение timeoutexception

Вопрос:

У нас есть метод службы WCF (синхронный), который вызывает другой процесс (через COM) для выполнения некоторых действий. Теперь этот COM-процесс занимает около 10-15 секунд для завершения, а затем возвращает вызов моей службе, которая, в свою очередь, должна быть возвращена клиенту.

На стороне клиента WCF у нас время отправки установлено равным 5 секундам, поэтому через 5 секунд мы получаем исключение тайм-аута на клиенте.

Теперь мой вопрос заключается в том, что происходит на стороне службы после того, как клиент получает исключение тайм-аута. Поскольку вызов COM-процесса все еще выполняется и может вернуться в службу еще через 5-10 секунд, как служба обрабатывает этот сценарий.

Дайте мне знать, требуется ли дальнейший ввод.

С уважением,

Ответ №1:

Afaik, на стороне клиента генерируется исключение, но служба продолжает операцию. Если у вас выполняются длительные операции, вы можете проверить асинхронные вызовы.

Обновить:Если это невозможно и увеличение тайм-аута не является вариантом по той же причине, я не вижу, как вы можете избежать исключения тайм-аута. Некоторые способы восстановления:

  • Если вы хотите прервать работу сервера по тайм-ауту клиента, вы могли бы добавить служебную операцию, подобную CancelCOMCall , и вызвать из клиента, когда он перехватит TimeoutException , что приведет к остановке COM-процесса.

  • Если вы хотите завершить операцию, но предотвратить повторяющиеся вызовы от клиента (вызванные повторными попытками после исключения тайм-аута), вы можете сохранить, какие COM-операции выполняются для каждого клиента, и отменить вызовы для уже запущенных процессов.

Я бы согласился, что ни один из методов не является очень аккуратным, но мне это кажется немного сложным без асинхронных вызовов. Однако я не эксперт по WCF.

Комментарии:

1. Что ж, я понимаю вашу точку зрения относительно асинхронных вызовов, но, к сожалению, вызовы служб не могут выполняться асинхронно (из-за некоторой спецификации / стандарта, которому мы следуем).