wcf异常没有显示堆栈跟踪

Yak*_*kov 2 .net c# wcf exception faultexception

我需要抛出wcf异常而不向客户端显示堆栈跟踪,只需要消息...

抛出新的FaultException("ex1");

我平均有20个异常字符串.我如何实现它而不是每次使用字符串参数抛出FaultException,而是抛出异常对象

FaultException_i i = 1...20
Run Code Online (Sandbox Code Playgroud)

Cyb*_*axs 5

使用WCF服务时,必须使用FaulException,因为它是处理错误的本机Soap方法.但是,并非所有异常都能正确实现wcf序列化.

永远不应向客户端公开异常详细信息(包括堆栈跟踪).你可以在配置中轻松关闭它:

<system.serviceModel>
   <behaviors>
      <serviceBehaviors>
         <behavior name="MyServiceBehavior">
             <serviceDebug includeExceptionDetailInFaults="False" />
         </behavior>
      </serviceBehaviors>
   </behaviors>

   <services>
      <service name="MyService"
               behaviorConfiguration="MyServiceBehavior" >
          ....
      </service>
   </services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

此外,我通常使用包含您的异常信息的自定义数据协定.

[DataContract]
public class MyFault
{
    [DataMember]
    public int Code { get; set; }
    [DataMember]
    public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,我只是抛出这样的通用错误:

var myFault = new MyFault()
        {
            Code = ErrorCode.UnhandledException
            Message = ex.Message,
        };
...
throw new FaultException<MyFault>(myFault);
Run Code Online (Sandbox Code Playgroud)