Как я могу получить WCF FaultException, когда сервер возвращает HTTP 401? - PullRequest
2 голосов
/ 11 января 2010

У меня есть клиент на основе WCF для набора веб-сервисов. Тестовый клиент позволяет мне видеть необработанные запросы и ответы, поступающие в службы и из них. Поведение оконечной точки инспектора сообщений используется для «извлечения» необработанных запросов и ответных сообщений и сохранения их для последующего отображения в пользовательском интерфейсе.

Это прекрасно работает, за исключением случая использования, когда передаются недействительные учетные данные. Сервер возвращает HTTP 401 вместе с ошибкой SOAP, содержащей подробности произошедшего. Это ранит меня несколькими способами:

  1. На клиенте это выглядит как MessageSecurityException, а не FaultException, поэтому я не могу получить подробности из-за ошибки.
  2. Это исключение, по-видимому, предотвращает запуск обработчика событий AfterReceiveReply в моем инспекторе сообщений, поэтому у меня нет доступа к необработанному ответу.

Можно ли как-то справиться с этим случаем, чтобы ошибка SOAP проявлялась как FaultException и позволяла моему инспектору сообщений обрабатывать ответы независимо от возвращаемого кода состояния HTTP?

Спасибо!

1 Ответ

2 голосов
/ 11 января 2010

Вы не можете. Вы получите FaultException, только если исключение .NET произошло в коде на стороне сервера и было перехвачено.

HTTP 401 - это «Доступ неавторизованным» - вы получите это исключение еще до того, как достигнете серверного кода -> это всегда будет MessageSecurityException - никогда FaultException (и нет способа волшебным образом повернуть либо в FaultException, либо).

Любое исключение, которое происходит до того, как выполнение даже достигает серверного кода (такие вещи, как EndpointNotFoundException или TimeoutException), никогда не являются исключениями ошибок.

Все специфичные для WCF исключения происходят из общего базового класса, однако - CommunicationException. Так что, возможно, вы можете справиться с этим как запасной вариант.

...