Вот моя проблема. У меня есть промежуточный веб-сервис, используемый несколькими веб-клиентами. Веб-сервис - это сервис-оболочка, который выполняет звонки на веб-сервисы нескольких поставщиков. Вызов веб-службы поставщика заключен в TryCatch, но все сгенерированные исключения не попадают в мой веб-сервис, а попадают в клиентские приложения.
Я что-то упустил? Это связано с этой публикацией ?
Вот упрощенный фрагмент кода:
Dim VendorWebservice as New VendorWebservice
Dim VendorResponse As VendorResponse = Nothing
Dim ClientResponse as New CustomClientResponse
Try
VendorResponse = VendorWebservice.VendorWebMethod
Catch ex As Exception
ClientResponse.ErrorMessage = ex.Message
ClientResponse.Status = "VendorError"
Return ClientResponse
End Try
EDIT
Чтобы раскрыть некоторые детали ... Код выполняется успешно в 99 +% случаев. В редких случаях возникает проблема с веб-сайтом поставщика, когда возникает эта проблема. Я открыл VS как для одного из веб-клиентов, так и для веб-службы, и могу пройти по коду от клиента до WS и обратно. Когда я смог воспроизвести проблему, я прошел через клиентский код туда, где он вызывает наш веб-сервис, затем переключился на код WS и проходил до тех пор, пока он не вызывает код поставщика, и в этот момент он возвращается к клиентскому коду, без нажатия на блок Catch или любой код после него.
Надеюсь, это поможет.
EDIT
Некоторые из опубликованных ответов предоставили возможности для исследований, особенно примечательно, что могут быть созданы исключения, которые не являются производными от System.Exception. (Кто знал?) Но я также узнал, что в .NET 2.0 и более поздних версиях эти не-System.Exception исключения заключаются в .NET в System.Exception. Так что в теории это должно исключать не System.Exceptions out.
Кроме того, из моего прочтения теоретически при вызове веб-службы (как это делает мой веб-сервис) должны быть только два типа исключений: System.Net.WebException и System.Web.Services.Protocols.SoapException, оба из которых происходят от System.Exception. Я не знаю, действительно ли это правда, если при вызове веб-службы возможны только 2 типа исключений, но я добавлю это. :)
Все еще в поисках ответа ...
EDIT
Воспроизведение условия ошибки оказалось неуловимым. Каждый сценарий, который я бросил в коде, отвечал как ожидалось, с ошибкой, улавливаемой в блоке Catch. Хотя теоретически .NET должен обернуть исключения, которые не являются производными от System.Exception, единственный логичный ответ, по-видимому, согласуется с ответом Джо о том, что возникшее нами исключение НЕ происходит из System.Exception и, таким образом, рассматривается как необработанное. исключение.