Я хочу знать, в каких случаях прокси-сервер WCF (сгенерированный vs2008 или svcutil) становится неисправным (состояние ошибки)? поэтому я могу воссоздать новый экземпляр и избежать использования неисправного.
В настоящее время я обрабатываю TimeoutException, FaultException, CommunicationObjectAbortedException
try
{
client.Method1(args);
}
catch (TimeoutException)
{
client.Abort();
ReCreate();
}
catch (FaultException)
{
client.Abort();
ReCreate();
}
catch (CommunicationObjectAbortedException)
{
client.Abort();
ReCreate();
}
Я думаю, что я могу избежать всех этих типов и обрабатывать только родительское CommunicationException, достаточно ли этого? Мне нужны комментарии
Любое неперехваченное исключение на стороне сервера, которое не обрабатывается и не преобразуется в FaultException
или FaultException<T>
, скорее всего, приведет к повреждению вашего канала. В сценарии для каждого вызова или одностороннем сценарии вам часто не очень важно, чтобы канал был скомпрометирован, но в сценарии на основе сеанса вы определенно будете!
Лучше всего попытаться поймать все исключения на стороне сервера и либо просто подавить их (зарегистрировать их на сервере и ничего не делать), либо вернуть их клиенту с помощью FaultException
.
Чтобы это сделать, ваша реализация службы также должна реализовать интерфейс IErrorHandler, который позволяет вам делать именно это - поймать все исключения и либо протоколирование, либо подавление их, либо преобразование их в ошибки SOAP.
Марк
Объект прокси WCF может стать ошибочным из-за какого-либо исключения, кроме исключения исключения. Таким образом, в основном вам лучше всего просто проверить состояние прокси-сервера, и он ошибочно создает новый.
Еще одна вещь, о которой нужно помнить, - это то, что ошибка связана с сеансами WCF. Если вам не нужны сеансы WCF, обязательно отключите их, и вы предотвратите целый ряд возможных проблем.