Ну, в этом случае есть «стандартные» исключения и «пользовательские» исключения (те, которые определены разработчиком сервиса FaultContact
) и представлены в ссылке на сервисный контракт).
В первом случае ваши проблемы, я бы предположил, это CommunicationException
и TimeoutException
; это документированные возможные исключения для ICommunicationObject.BeginOpen
и другие методы «открытия» ICommunicationObject
(base of the model). CommunicationObjectFaultedException
документирован для методов «закрытия». Существует также QuotaExceededException
для методов отправки сообщений, таких как IRequestChannel.Request
. Среди many more that might be они должны быть доступны для обнаружения.
Стоит отметить, из статьи MSDN связаны выше, заключается в следующем:
Все исключения, генерируемые с помощью каналов должны быть либо System.TimeoutException
, System.ServiceModel.CommunicationException
, или тип, полученный из CommunicationException. (Исключения, такие как ObjectDisposedException также могут быть выброшены, но только, чтобы указать, что код вызова был неправильно канал. Если канал используется правильно, он должен только выбросить данные исключения.)
Тогда являются «Дефектами», которые являются исключениями, поднятых на служебной стороне и (потенциально, если он включен) детализированы на вызывающую стороне, затем может справиться с этим или бросить правильную сторону клиента исключение:
При генерации неисправность, пользовательский канал не должен посылать ошибку напрямую, скорее, он должен t hrow исключение и пусть слой выше решает, следует ли преобразовать это исключение в неисправность и как отправить .
Канал State
предлагает событие Faulted
, к которому вы можете подписаться на быть информированным, когда такое состояние, которое он достиг, и, возможно, действовать. По умолчанию (без настройки supression (?)) Ошибки будут возникать как управляемые исключения; еще раз, чтобы подтвердить:
В клиентах WCF, ошибки SOAP, которые возникают в процессе общения, которые являются , представляющего интереса для клиентских приложений выращиваются как управляемые исключения. Несмотря на то, что во время выполнения может произойти множество программ, приложения, использующие модель программирования клиента WCF, могут ожидать обработки исключений из [...] двух типов в результате связи .
И this refers again к CommunicationException
и TimeoutException
упомянутой выше.
Наконец, в настоящее время, по крайней мере, является неожиданным:
FaultException
исключения выбрасываются, когда слушатель получает ошибку , не ожидается, или указанный в контракте операции; обычно Это происходит, когда приложение отлаживается, и у службы есть System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults
Свойство установлено в true.
спасибо за ссылку. Я знаю, как различаться между исключениями, которые следует уловить, и исключениями, которые должны пузыриться, - вот этот вопрос. Тем не менее, сгенерированный код не имеет никакого /// тега или чего-либо намека на то, какие исключения могут быть выбраны. –
vidstige
Проверьте следующее [тема] [1] [1]: http://stackoverflow.com/questions/264747/finding-out-what-exceptions-a-method-might-throw-in- c-sharp – Tomtom