Возможно ли отправить мои собственные разработанные исключения по мылу клиенту с помощью http.sys?Использование собственных исключений в wse, а не только SoapException
ответ
Да, вы можете бросить свои собственные исключения. Любое неперехваченное исключение, которое не вытекает из SoapException, будет размыто платформой .NET в SoapException. Вы можете получить из SoapException, если вы хотите контролировать, как формируются определенные части SoapException (например, части ошибок и деталей).
Насколько я знаю, к сожалению, ответ отрицательный. Вы не можете создавать собственные пользовательские исключения на стороне сервера и рассчитывать использовать их на стороне клиента через WSE. Я не могу дать много технической информации о том, почему (как и почему это не допускается WSE), но я уверен в своем ответе, потому что я это проверил.
Вы можете использовать подход, описанный в предоставленной ссылке, чтобы вернуть настраиваемое исключение, которое наследуется от System.Web.Services.Protocols.SoapException, однако вы должны зафиксировать исключение на стороне клиента как SoapException, поскольку вы не будете быть в состоянии захватить его в качестве пользовательского типа исключений: http://msdn.microsoft.com/en-us/library/ms229064.aspx
чтобы воссоздать тест для собственного подтверждения необходимо выполнить следующие действия:
- Создать тестовый класс исключений, называйте, как вы хотите, и убедитесь, он следует шаблону, описанному в приведенной выше ссылке I (имеются примеры кода).
Создать веб-метод, который явно возвращает тест исключение следующим образом:
'This is in VB.Net <WebMethod()> _ Public Function ThrowTestSoapException() As TestSoapException Return New TestSoapException() End Function
Try, чтобы восстановить WSE библиотеку вашего клиента (с помощью WseWsdl3.exe), и вы должны получить сообщение об ошибке, как это: " Ошибка: сервер недоступен, пожалуйста, попробуйте позже "
То есть, насколько я мог бы получить при попытке создать свои собственные переводные пользовательские исключения. Опять же, единственное, что я смог сделать, это вернуть пользовательское исключение, унаследованное от класса SoapException, и поймало его на стороне клиента как исключение SoapException. Это тот же метод, описанный в ссылке, что «CheGueVerra» указал above.
В ответ на комментарий Джона Сондерса выше: Да, если возможно перейти на WCF, WSE действительно устарела. Поскольку это работа для меня и для других, задающая эти вопросы, переход от WSE к WCF потребует одобрения руководства - поэтому некоторые из нас не могут легко сделать эти изменения - даже если мы отчаянно хотим.
Это, конечно, наша работа, чтобы правильно информировать руководство, чтобы они могли принять правильное решение. – 2012-02-17 01:06:10
Как и службы ASMX, на основе WSE небольшая поддержка SOAP Faults. Вы можете вернуть их (SoapException с набором свойств Detail), но они не будут отображаться в WSDL. Если они получены клиентом WSE, они будут отображаться как SoapException, а не как особый тип исключения.
WCF имеет полную поддержку ошибок SOAP, как на стороне клиента, так и на стороне сервера.
WSE является устаревшим. Все новые работы с веб-сервисами должны выполняться с использованием WCF, а существующий код WSE должен быть перенесен или удален как можно скорее. – 2009-09-01 02:48:13