Использование собственных исключений в wse, а не только SoapException - PullRequest
4 голосов
/ 26 сентября 2008

Можно ли отправить мои собственные разработанные исключения через Soap клиенту, используя http.sys ??

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

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

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

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

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

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

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

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

0 голосов
/ 17 февраля 2012

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

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

0 голосов
/ 19 ноября 2008

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

...