我刚刚检查了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
。那么为什么我们需要呢?
答案 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说:“ [允许所有例外]的这种行为应仅用于调试目的,决不能在生产环境中启用。”