2011-11-17 68 views
2

我有一個使用企業庫進行異常處理和WCF驗證集成的WCF服務。他們似乎並不一起工作。WCF和企業庫 - 異常屏蔽和驗證應用程序塊

我要的是:

  1. 如果我的服務引發任何異常,WCF異常屏蔽將抓住這一點,並拋出一個FaultException<MyServiceFault>
  2. 如果傳入的消息未通過驗證,則該服務應繼續丟棄FaultException<ValidationFault>

但是,我不知道如何告訴異常屏蔽策略讓驗證例外通過。

我有一些企業庫配置,將每個異常變成FaultException<MyServiceFault>。如果我得到EnterpriseLibrary登錄它捕獲的異常,它說,它得到

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException

驗證失敗時

。但是,如果將此例外情況添加到配置中作爲新的<exceptionType>,postHandlingActionNone,那麼在驗證失敗時仍然會拋出FaultException<MyServiceFault>

是否有可能使用WCF異常屏蔽來捕獲除WCF驗證異常以外的每個異常?如果沒有,我將不得不爲所有可能拋出的異常添加更多配置 - 在這種情況下,異常屏蔽的意義何在?

回答

0

嗯,好吧,雖然我想我已經試過了,下面的配置似乎做的工作:

<add name="WCF Exception Shielding"> 
    <exceptionTypes> 
     <add name="FaultException`1" type="System.ServiceModel.FaultException`1[[Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationFault, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
      postHandlingAction="NotifyRethrow" /> 
     <add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
      postHandlingAction="ThrowNewException"> 
      <exceptionHandlers> 
       <add type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
        faultContractType="MyServiceFault, MyServices" 
        name="Fault Contract Exception Handler" /> 
      </exceptionHandlers> 
     </add> 
    </exceptionTypes> 
</add> 

任何異常獲取服務代碼中拋出,它拋出一個FaultException<MyServiceFault>,除了如果WCF驗證應用程序塊引發異常,則一切正常,客戶端收到FaultException<ValidationFault>

0

庫中存在一個會阻止您提供的解決方案運行的錯誤。解決方法是不要更改例外屏蔽塊的默認策略名稱。

Refer to this link to add vote to this bug.

+0

雖然這是事實,具有比「WCF異常屏蔽」以外的任何將導致這一切失敗,I *正在使用此策略的名稱*。我的答案中的配置確實有效! –