WCF异常编组和InnerException

时间:2013-01-02 13:30:27

标签: wcf nhibernate

我正在使用NetDataContractSerializer来序列化WCF上的异常。当我得到NHibernateADOException(客户端未知)时,我得到了FaultException。不幸的是,这导致我失去内部异常消息。有没有办法将未知异常(或任何其他类型)反序列化为指定的已知类型,还是有其他方法可以解决该问题?

2 个答案:

答案 0 :(得分:0)

您希望在服务行为上将includeExceptionDetailsInFaults设置为true。

看到这个问题:

WCF IncludeExceptionDetailInFaults programmatically?

答案 1 :(得分:0)

您可以在web.config中设置此项以返回异常:

<serviceDebug includeExceptionDetailInFaults="true"/>

此标记必须放在serviceBehavior标记内,通常如下:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
</system.serviceModel> 

详细信息示例:

  

服务器堆栈跟踪:em   System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime   操作,ProxyRpc&amp; rpc)em   System.ServiceModel.Channels.ServiceChannel.Call(String action,   Boolean oneway,ProxyOperationRuntime操作,Object [] ins,   对象[]输出,TimeSpan超时)em   System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage   methodCall,ProxyOperationRuntime operation)em   System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天   消息)

     

在[0]处重新抛出异常:em   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天   reqMsg,IMessage retMsg)em   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培;   msgData,Int32类型)em   IMyService.GetDataOperation(RequestObterBeneficiario   请求)em   MyServiceClient.GetDataOpration(的RequestData   请求)

这将返回客户端的详细信息。 在开发期间这可能有所帮助,但是当您的服务投入生产时,您将不再保留此信息,因为您的服务可以发送敏感数据,例如您的数据库名称或配置。