2011-11-17 19 views
2

例外処理とWCF検証統合のためにエンタープライズライブラリを使用しているWCFサービスがあります。彼らは一緒に働くようには思われません。私が欲しいものWCF&エンタープライズライブラリ - 例外シールドと検証アプリケーションブロック

は次のとおりです。

  1. 私のサービスは、例外のいずれかの種類をスローした場合、WCFの例外シールドがこれをキャッチし、FaultException<MyServiceFault>をスローします。
  2. 受信メッセージが検証に失敗した場合、サービスはFaultException<ValidationFault>をスローし続ける必要があります。

しかし、私はException ShieldingポリシーにValidation例外を通す方法を教えていません。

すべての例外をFaultException<MyServiceFault>に変換するエンタープライズライブラリの設定があります。私はそれがキャッチした例外をログに記録EnterpriseLibrary取得した場合、それはそれを取得言う

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException

検証が失敗しました。しかし、postHandlingActionNoneの新しい<exceptionType>というコンフィグレーションにこの例外を追加すると、検証に失敗したときにまだ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の例外シールド」以外のものを持つことは、それがすべて失敗する原因になりますことは事実であるが、私は、このポリシーの名前を使用しています* *。私の答えの設定は機能します! –

関連する問題