0

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

4

2 回答 2

0

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

看到这个问题:

WCF IncludeExceptionDetailInFaults 以编程方式?

于 2013-01-02T23:11:34.183 回答
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 operation, ProxyRpc& rpc) em System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs , TimeSpan 超时) em System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime 操作) em System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息)

在 [0] 处重新抛出异常:em System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) em System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 类型) em IMyService.GetDataOperation( RequestObterBeneficiario request) em MyServiceClient.GetDataOperation(RequestData request)

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

于 2016-08-26T16:40:47.493 回答