2008-09-26 1 views
4

Возможно ли отправить мои собственные разработанные исключения по мылу клиенту с помощью http.sys?Использование собственных исключений в wse, а не только SoapException

+0

WSE является устаревшим. Все новые работы с веб-сервисами должны выполняться с использованием WCF, а существующий код WSE должен быть перенесен или удален как можно скорее. – 2009-09-01 02:48:13

ответ

0

Да, вы можете бросить свои собственные исключения. Любое неперехваченное исключение, которое не вытекает из SoapException, будет размыто платформой .NET в SoapException. Вы можете получить из SoapException, если вы хотите контролировать, как формируются определенные части SoapException (например, части ошибок и деталей).

1

Насколько я знаю, к сожалению, ответ отрицательный. Вы не можете создавать собственные пользовательские исключения на стороне сервера и рассчитывать использовать их на стороне клиента через WSE. Я не могу дать много технической информации о том, почему (как и почему это не допускается WSE), но я уверен в своем ответе, потому что я это проверил.

Вы можете использовать подход, описанный в предоставленной ссылке, чтобы вернуть настраиваемое исключение, которое наследуется от System.Web.Services.Protocols.SoapException, однако вы должны зафиксировать исключение на стороне клиента как SoapException, поскольку вы не будете быть в состоянии захватить его в качестве пользовательского типа исключений: http://msdn.microsoft.com/en-us/library/ms229064.aspx

чтобы воссоздать тест для собственного подтверждения необходимо выполнить следующие действия:

  1. Создать тестовый класс исключений, называйте, как вы хотите, и убедитесь, он следует шаблону, описанному в приведенной выше ссылке I (имеются примеры кода).
  2. Создать веб-метод, который явно возвращает тест исключение следующим образом:

    'This is in VB.Net 
    <WebMethod()> _ 
    Public Function ThrowTestSoapException() As TestSoapException 
        Return New TestSoapException() 
    End Function 
    
  3. Try, чтобы восстановить WSE библиотеку вашего клиента (с помощью WseWsdl3.exe), и вы должны получить сообщение об ошибке, как это: " Ошибка: сервер недоступен, пожалуйста, попробуйте позже "

То есть, насколько я мог бы получить при попытке создать свои собственные переводные пользовательские исключения. Опять же, единственное, что я смог сделать, это вернуть пользовательское исключение, унаследованное от класса SoapException, и поймало его на стороне клиента как исключение SoapException. Это тот же метод, описанный в ссылке, что «CheGueVerra» указал above.

В ответ на комментарий Джона Сондерса выше: Да, если возможно перейти на WCF, WSE действительно устарела. Поскольку это работа для меня и для других, задающая эти вопросы, переход от WSE к WCF потребует одобрения руководства - поэтому некоторые из нас не могут легко сделать эти изменения - даже если мы отчаянно хотим.

+0

Это, конечно, наша работа, чтобы правильно информировать руководство, чтобы они могли принять правильное решение. – 2012-02-17 01:06:10

0

Как и службы ASMX, на основе WSE небольшая поддержка SOAP Faults. Вы можете вернуть их (SoapException с набором свойств Detail), но они не будут отображаться в WSDL. Если они получены клиентом WSE, они будут отображаться как SoapException, а не как особый тип исключения.

WCF имеет полную поддержку ошибок SOAP, как на стороне клиента, так и на стороне сервера.