簡體   English   中英

WCF 服務和客戶端應用程序的錯誤處理

[英]Error Handling with WCF Service and Client Application

就我而言,我有一個 WCF 服務 (MyService.svc)。 我還有一個正在實例化和使用服務合同的客戶端應用程序。

在服務級別處理異常並以有序和自我描述的方式將它們“傳輸”到客戶端的最佳方法是什么?

如果我在 WCF 服務上有一個未處理的異常,它似乎作為一個 CommunicationException 冒泡回客戶端應用程序。

但是在服務級別拋出異常並將相同的異常傳輸到客戶端級別的最佳方法是什么? 或者,如果我不在服務級別處理異常(或者只是在服務級別重新拋出它),如何將其明確定向到客戶端?

或者這不是典型的 SOA 工作方式嗎? 這里的“正確方法”是什么?

謝謝!

首先,如果你想通過協議傳遞異常,你必須將它包裝在一個錯誤異常中,否則你會得到一個服務器錯誤。

在方法上使用 FaultContract 屬性來啟用 faultContract 並定義要使用創建 Message 協定傳遞的消息:

public interface IMyService
{
    [OperationContract]
    [FaultContract(typeof(Message))]
    void WCFOperation();
}

[DataContract(Namespace = "http://www.mycompany.pt/myservice")]
public class Message
{
    String _code;
    [DataMember]
    public String Code
    {
        get { return _code; }
        set { _code = value; }
    }

    String _text;
    [DataMember]
    public String Text
    {
        get { return _text; }
        set { _text = value; }
    }
}

要將異常轉換為 FaultExceptions,我使用以下幫助程序:

    class Helper
    {

      internal static System.ServiceModel.FaultException<Message> ConvertToSoapFault(MyException ex)
      {
          FaultCode fc = new FaultCode(ex.Code);
          return new FaultException<Message>(new Message(){ Text= ex.Message, Code= ex.Code});
      }

      internal static System.ServiceModel.FaultException ConvertToSoapFault(Exception ex)
      {            
          return new FaultException(ex.Message);
      }
    }

最后,在 operationContract 的實現中,簡單地這樣做:

    public void WCFOperation()
    {
        try
        {
           ...
        }           
        catch (Exception ex)
        {
            Helpers.publishError(ex);
            throw Helpers.ConvertToSoapFault(ex);
        }
    }

暫無
暫無

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

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