WEB SERVICES異常
來源:互聯網
上載者:User
當WEB SERVICES引發一個不在內部處理的異常時,異常將被傳送到ASP.NET,來決定如何處理.
通常有兩種:
1)將異常發往HTTP用戶端,ASP.NET將向用戶端返回一條HTTP INTERNAL SERVER
ERROR(內部錯誤,錯誤碼是500)訊息,用戶端根據訊息進行處理.
2)將異常發往SOAP用戶端
如果用戶端使用SOAP協議,ASP.NET則先將其作為SOAP錯誤,然後傳回用戶端.使用SOAP代理的
用戶端收到一個SOAP錯誤時,其回應程式式與前一種差不多,不同的是SOAP代理引發的是SYSTEM
.WEB.SERVICES.PROTOCOLS.SOAPEXCEPTION.,並將SOAPEXCEPTION.CODE的值設定為SOAP
錯誤的FAULTCODE欄位(預設是伺服器錯誤)的值,將SOAPEXCEPTION.MESSAGE屬性設定為
FAULTSTRIN欄位(預設是表示捕獲異常的堆疊追蹤的字串)的值.
但這種方法的缺點是無論WEB SERVICES拋出何種異常,用戶端都是拋出SOAPEXCEPTION.
解決的方法就不允許ASP.NET自動處理未被捕獲的用戶端綁定異常,WEB SERVICES必須捕獲所有應用程式異常,並明確拋一個SOAPEXCEPTIONASP.NET捕獲時將正確地使用SOAPEXCEPTION的CODE和MESSAGE屬性來填充SOA的錯誤的FAULTCODE和FAULTSTRING元素,這樣,你就可以返回自訂錯誤碼,這些代碼向用戶端提供了有意義的錯誤資訊,然後,用戶端就可以捕獲SOAPEXCEPTION,並用SOAPEXCEPTION.CODE屬性提供的錯誤碼來執行適當的處理.不過這還是有缺陷,那就是用戶端的開發人員必須知道怎麼樣處理這些代碼,所以必須將這些資訊放進系統文檔.
自訂的錯誤碼
public sealed class e1 : ApplicationException
{
public e1(string message):base(message)
{
//描述該錯誤的資訊,不做任何事,依賴於基類
// TODO: Add constructor logic here
//
}
}
public sealed class e2 : ApplicationException
{
public e2(string message):base(message)
{
//描述該錯誤的資訊,不做任何事,依賴於基類