📜  WCF-异常处理

📅  最后修改于: 2020-11-19 09:28:45             🧑  作者: Mango


WCF服务开发人员可能会遇到一些无法预料的错误,需要以适当的方式向客户端报告。通常通过使用try / catch块来处理这种称为异常的错误,但是同样,这是非常特定于技术的。

由于客户端的关注区域与错误的发生方式或导致错误的因素无关,因此使用SOAP Fault约定将错误消息从服务传递到WCF中的客户端。

故障合同使客户可以对服务中发生的错误具有文档化的视图。以下示例提供了更好的理解。

步骤1-使用除法操作创建一个简单的计算器服务,这将生成一般异常。

using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;

namespace Calculator {
   // NOTE: You can use the "Rename" command on the "Refactor" menu to change 
   // the interface name "IService1" in both code and config file together.
   
   [ServiceContract]
   
   public interface IService1 {
      [OperationContract]
      int divide(int num1, int num2);
      // TODO: Add your service operations here
   }
}

类文件的编码如下所示-

Wcf异常处理2

现在,当我们尝试将数字10除以零时,计算器服务将引发异常。

Wcf异常处理3

Wcf异常处理4

异常可以通过try / catch块来处理。

Wcf异常处理5

现在,当我们尝试将任何整数除以0时,它将返回值10,因为我们已经在catch块中对其进行了处理。

Wcf异常处理6

步骤2-在此步骤中使用FaultException将异常信息从服务传递给客户端。

public int Divide(int num1, int num2) { 
   //Do something 
   throw new FaultException("Error while dividing number"); 
}

Wcf异常处理7

步骤3-还可以创建一个自定义类型,以使用FaultContract发送错误消息。创建自定义类型必不可少的步骤如下所述-

通过使用数据协定来定义类型,并指定要返回的字段。

服务操作由FaultContract属性装饰。类型名称也已指定。

创建服务实例以引发异常,并分配了自定义异常属性。