修改例外

时间:2010-11-30 07:53:15

标签: wcf

我有2个WCF服务和一个调用第一个WCF服务方法的客户端,该方法因此调用第二个WCF服务的方法。第二个WCF服务的方法引发了一般故障异常,我需要通过第一个服务将此异常“交付”给我的客户端。第一个WCF服务通常在异常消息体中使用一些Action“http:// SomeNamespace”获取该泛型异常。当第一个服务向客户端重新抛出此异常时,客户端变得简单FaultException而不是FaultException 1 . I think the problem is in Action`,其中包含客户端无法接受的命名空间,这就是为什么客户端无法获得通用异常。在第一个WCF服务中有一个WCF异常屏蔽。以下是配置代码和处理程序代码。 请帮助我,并建议更改客户能够正常获取的异常操作的最佳方法。

这是配置:

<exceptionHandling>
      <exceptionPolicies>
        <add name="WCF Exception Shielding">
          <exceptionTypes>
            <add type="System.ServiceModel.FaultException`1[[Sample.SomeFaultContract, Sample, PublicKeyToken=769e6b46280078d4]], System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                postHandlingAction="ThrowNewException" name="SomeFaultContract">
                <exceptionHandlers>
                  <add faultContractType="Sample.SomeFaultContract, Sample, PublicKeyToken=769e6b46280078d4"
                    type="Helper.ServiceFaultContractHandler, Logger, PublicKeyToken=769e6b46280078d4"
                    name="Fault Contract Exception Handler" />
                </exceptionHandlers>
            </add>
          </exceptionTypes>
        </add>
  </exceptionHandling>

处理程序部分是:

public class ServiceFaultContractHandler : IExceptionHandler
{
   public ServiceFaultContractHandler(NameValueCollection ignore) { }

   public Exception HandleException(Exception exception, Guid correlationID)
   {


   }        
}

提前谢谢。

亚兰

1 个答案:

答案 0 :(得分:0)

为了获取异常的详细信息,您应该在服务行为中将includeExceptionDetailInFaults属性设置为true。 以下是一个示例:

<behaviors>
    <serviceBehaviors>
      <behavior name="WCFServicesName">
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
   </serviceBehaviors>
</behaviors>