簡體   English   中英

從ASMX Web服務捕獲自定義異常

[英]Catch Custom Exception from ASMX Web Service

我有一個Web服務,我在其中創建了一個自定義異常。 假設此異常的名稱是InvalidContractException。

我想要做的是,如果發生特定步驟,我想拋出此異常。 但是,我無法弄清楚客戶端如何捕獲InvalidContractException以便正確處理它。

這是一個用C#編寫的ASP.Net Web服務

你不能這樣做:

  1. Web服務執行SOAP錯誤。 例外是特定於平台的。
  2. 在ASMX Web服務中未處理異常時,.NET會將其轉換為SOAP Fault。 異常的詳細信息未序列化。
  3. 在ASMX客戶端中,SOAP錯誤將轉換為SoapException。

ASMX Web服務沒有對​​SOAP Faults的適當支持。 除了客戶端的SoapException之外,沒有辦法獲得任何異常。

升級到WCF的另一個原因。


作為ASMX 無法做到的一個例子,這里是WCF的工作原理。 WCF允許您為每個Web服務操作指定它可以返回哪些錯誤:

[ServiceContract]
public interface IMyServiceContract
{
    [FaultContract(typeof(IntegerZeroFault))]
    [FaultContract(typeof(SomeOtherFault))]
    [OperationContract]
    public string GetSomeString(int someInteger);
}

[DataContract]
public class IntegerZeroFault
{
    [DataMember]
    public string WhichInteger {get;set;}
}

[DataContract]
public class SomeOtherFault
{
    [DataMember]
    public string ErrorMessage {get;set;}
}

public class MyService : IMyServiceContract
{
    public string GetSomeString(int someInteger)
    {
        if (someInteger == 0) 
            throw new FaultException<IntegerZeroFault>(
                new IntegerZeroFault{WhichInteger="someInteger"});
        if (someInteger != 42)
            throw new FaultException<SomeOtherFault>(
                new SomeOtherFault{ErrorMessage ="That's not the anaswer"});
        return "Don't panic";
    }
}

然后,WCF客戶端可以捕獲FaultException<SomeOtherFault> 當我嘗試使用Java客戶端時,它能夠捕獲SomeOtherFault ,IBM Rational Web Developer創建它來自Java Exception類。

如果您的目標是拋出異常,以便用戶可以知道出現了問題,發生了一些特定的異常並對其進行了特殊處理,那么您確實有一個選項。 您只需要依賴客戶端代理的正確實現(實際上,一個選項是自己提供客戶端代理)。

有一個有用的文章速效這里了解如何SoapException的工作。

本質上,它歸結為在SoapException的詳細信息節點中編碼異常詳細信息(例如,錯誤代碼),然后在重新拋出異常之前在客戶端解析它。

沒有辦法重新創建異常就像它被拋出服務邊界一樣,除了客戶端的SoapException之外,沒有任何自動方法可以獲取任何東西。

在您的客戶端調用拋出Fault的WCF服務時,您可以

試試..

將錯誤捕獲為FaultException(Of YourService.FooBarFault)

結束嘗試

您必須為可能生成錯誤的服務方法聲明FaultContract,例如

_

 <FaultContract(GetType(FooBarFault))> _

 Function yourCall

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM