当我们可以使用FaultException时,为什么需要FaultContract?

时间:2016-11-22 08:29:25

标签: c# wcf

我刚刚检查了WCF FaultContract。根据它的定义,它用于向客户端发送异常详细信息。但我们可以使用FaultException来做到这一点。为什么我们需要FaultContract。以下是我的代码

ServiceData类

[DataContract]
public class ServiceData
{
    [DataMember]
    public bool Result { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }
    [DataMember]
    public string ErrorDetails { get; set; }
}

IService1.cs

[OperationContract]
ServiceData TestMethod();

Service1.svc.cs

 public ServiceData TestMethod()
 {
     ServiceData myServiceData = new ServiceData();

     myServiceData.Result = true;
     myServiceData.ErrorMessage = "Custom Error message.";
     myServiceData.ErrorDetails = "Error details of the exception";

     throw new FaultException<ServiceData>(myServiceData);
  }

我在客户端获取异常而不使用FaultContact。那么为什么我们需要呢?

1 个答案:

答案 0 :(得分:0)

今天有同样的问题。我只做过研究……我没有做任何测试。参见:

https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/fault-contract

似乎可以将服务器配置为将所有故障异常发送给客户端,或者仅将已声明的异常发送给客户端。

<behaviors>  
  <serviceBehaviors>  
    <behavior name="CalculatorServiceBehavior">  
      <serviceMetadata httpGetEnabled="True"/>  
      <serviceDebug includeExceptionDetailInFaults="True" />  
    </behavior>  
  </serviceBehaviors>  
</behaviors> 

因此,我认为您的服务器已配置为发送所有异常。为了提高安全性,可以将其更改为仅发送声明的异常。然后,您将需要使用FaultContract属性。

Microsoft说:“ [允许所有例外]的这种行为应仅用于调试目的,决不能在生产环境中启用。”