ใช้คำสั่ง 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 นี้ nog ถูกจับโดยวิธีการข้างต้น
คำถามของฉัน: เหตุใด 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-Service ข้อมูลที่ได้รับจะถูกจัดการเพื่อเติมตารางเฉพาะ AMSX-Webservice อาจไม่เปลี่ยนแปลงในสถานการณ์นี้
FaultException
หรืออาจจะเป็นFaultException<T>
ไม่ใช่SoapException
ประการที่สอง ถ้าcatch (Exception ex)
ไม่พบข้อยกเว้น นั่นหมายความว่าไม่มีข้อยกเว้นเกิดขึ้น - person John Saunders   schedule 30.01.2014