Реализация шаблона повторения для исключений переходного процесса вызова WCF

У меня есть очень простой сервис WCF SOAP, который делает некоторые изменения в БД при каждом вызове и возвращает некоторый ответ. Я также использую ServiceChannel, чтобы вызвать его из моего клиентского кода.

Я хочу убедиться, что мой код на стороне клиента не просто не работает, когда служба слишком занята, поэтому реализовал шаблон Retry, чтобы повторить вызов службы в случае обнаружения исключения. Однако я не хочу повторять попытку, если исключение вызвано моим кодом на стороне сервера WCF (если он не связан с соединением, или если какой-либо код OperationContract был выполнен в любом случае (тайм-аут не означает, что это не так, верно?)).

Так что я хочу повторить только если

  1. я отправил запрос
  2. Поймал исключение
  3. Ни один код на стороне сервера в моем методе OperationContract не был выполнен

Статья Microsoft (ссылка выше) практически не содержит информации о том, какие именно исключения являются временными. Какие типы исключений я должен использовать, чтобы поймать именно то, что мне нужно? Или как мне их отфильтровать?

1 ответ

Внутри вашей реализации службы WCF в ваших рабочих контрактах выявляются исключения, возникающие во время выполнения кода, и возвращаются конкретные исключения FaultException, сигнализирующие вашему клиенту о выполнении кода на стороне службы. Может быть введен специальный код ошибки или начать сообщение об ошибке отказа с предопределенной подстрокой. На вашей стороне клиента, как только вы поймаете исключение Fault, проверьте, существует ли подстрока (или конкретный код ошибки, который вы установили в своем сервисном коде), если они существуют, это означает, что ваш код на стороне обслуживания запущен, и вам не нужно повторять в противном случае Вы можете повторить попытку. Вы также можете перехватить другие типы исключений и повторить попытку.

Другие вопросы по тегам