Возьмите следующий оператор try-catch в WCF-Service
Try
'Here some method is being called.
Return myBs.PerformDailyUpdate()
Catch ex As Exception 'Exception is not being caught here
If service IsNot Nothing AndAlso service.HasWarnings Then
TextFileTracer.Write(String.Format("Warning in method: '{0}'.", name))
TextFileTracer.Write(service.GetWarnings)
End If
Try
TextFileTracer.Write("Error in dbmanager: " & service.HasErrors.ToString)
Catch ex2 As Exception
End Try
TextFileTracer.Write(String.Format("Error in method: '{0}'.", name))
TextFileTracer.Write(ex.Message & vbCrLf & ex.StackTrace)
End Try
End Function 'Exception shows here while debugging
В этом методе (PerformDailyUpdate
) вызывается ASMX-Webservice (.Net 2.0)
. Этот веб-сервис иногда выдает SOAPException
, вызванный методом, вызываемым из этого веб-сервиса. Однако каким-то образом это исключение SOAPException не перехватывается описанным выше методом.
Мой вопрос: почему SOAPException не перехватывается? Существуют ли какие-то характеристики, которые отделяют SOAP-Exception от обычных сгенерированных «исключений» (которые, в свою очередь, приводят к тому, что оно не перехватывается)?
Примечание. Приведенный здесь код не принадлежит мне. Так что, пожалуйста, не судите меня по этому поводу.
Сообщение об исключении (первая часть)
System.Web.Services.Protocols.SoapException: Unexpected application error: SqlException.
ADF.ExceptionHandling.GlobalExceptions.UnexpectedException: Unexpected application error: SqlException.
System.Data.SqlClient.SqlException: Incorrect syntax near ')'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
....
Спасибо
Scheme (how this clarifies the situation somewhat):
Internal DailyTriggerMechanism -----> WCF - Service -----> ASMX-Webservice ----> DB2/SQL
(Origin code above) (Exception being thrown)
Внутри службы WCF полученные данные обрабатываются для заполнения определенных таблиц. В этой ситуации AMSX-Webservice может не измениться.
FaultException
или, может быть,FaultException<T>
, а неSoapException
. Во-вторых, еслиcatch (Exception ex)
не перехватывает исключение, это означает, что исключение не было выброшено. - person John Saunders   schedule 30.01.2014