Поведение службы WCF при исключении тайм-аута - PullRequest
0 голосов
/ 17 мая 2011

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

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

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

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

С уважением,

1 Ответ

0 голосов
/ 17 мая 2011

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

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

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

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

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

...