在try catch中没有捕获SoapException

时间:2014-01-30 12:41:02

标签: vb.net wcf web-services try-catch soapexception

WCF-Service

中使用以下try-catch语句
    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)。这个webservice抛出了一个SOAPException,它是从一个从webservice.yet调用的方法引起的,不知怎的,这个SOAPException被上面的方法捕获了。

我的问题:为什么没有被捕获的SOAPException?是否有一些特征将SOAP异常与正常的异常分开?生成(这反过来导致它不被捕获)?

注意:这里写的代码不是我的。所以请不要对此进行评判

ExceptionMessage(第一部分)

  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可能不会更改。

1 个答案:

答案 0 :(得分:2)

我认为正常的异常应该能够捕获您列出的未处理错误,但除了常规异常之外,您还可以尝试特定于SOAP和/或SQL的异常。

喜欢:

try {
    //your failing code
} 
catch (SOAPException se) 
{
   //your response    }
catch (SQLException sqle) 
{
   //your response     
}
catch (Exception e) 
{
   //your response     
}