Реализация шаблона повторения для исключений переходного процесса вызова WCF
У меня есть очень простой сервис WCF SOAP, который делает некоторые изменения в БД при каждом вызове и возвращает некоторый ответ. Я также использую ServiceChannel, чтобы вызвать его из моего клиентского кода.
Я хочу убедиться, что мой код на стороне клиента не просто не работает, когда служба слишком занята, поэтому реализовал шаблон Retry, чтобы повторить вызов службы в случае обнаружения исключения. Однако я не хочу повторять попытку, если исключение вызвано моим кодом на стороне сервера WCF (если он не связан с соединением, или если какой-либо код OperationContract был выполнен в любом случае (тайм-аут не означает, что это не так, верно?)).
Так что я хочу повторить только если
- я отправил запрос
- Поймал исключение
- Ни один код на стороне сервера в моем методе OperationContract не был выполнен
Статья Microsoft (ссылка выше) практически не содержит информации о том, какие именно исключения являются временными. Какие типы исключений я должен использовать, чтобы поймать именно то, что мне нужно? Или как мне их отфильтровать?
1 ответ
Внутри вашей реализации службы WCF в ваших рабочих контрактах выявляются исключения, возникающие во время выполнения кода, и возвращаются конкретные исключения FaultException, сигнализирующие вашему клиенту о выполнении кода на стороне службы. Может быть введен специальный код ошибки или начать сообщение об ошибке отказа с предопределенной подстрокой. На вашей стороне клиента, как только вы поймаете исключение Fault, проверьте, существует ли подстрока (или конкретный код ошибки, который вы установили в своем сервисном коде), если они существуют, это означает, что ваш код на стороне обслуживания запущен, и вам не нужно повторять в противном случае Вы можете повторить попытку. Вы также можете перехватить другие типы исключений и повторить попытку.