2

例外処理とWCF検証の統合にEnterpriseLibraryを使用しているWCFサービスがあります。それらは一緒に機能していないようです。

私が欲しいのは:

  1. 私のサービスが何らかの例外をスローした場合、WCF Exception Shieldingはこれをキャッチし、をスローしFaultException<MyServiceFault>ます。
  2. 着信メッセージが検証に失敗した場合、サービスは引き続きをスローする必要がありFaultException<ValidationFault>ます。

ただし、検証例外を通過させるように例外シールドポリシーに指示する方法がわかりません。

すべての例外をに変換するエンタープライズライブラリ構成がありFaultException<MyServiceFault>ます。EnterpriseLibraryにキャッチした例外をログに記録させると、

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException

検証が失敗したとき。ただし、この例外をの新しいものとして構成に追加する<exceptionType>と、検証が失敗したときにスローされます。postHandlingActionNoneFaultException<MyServiceFault>

WCF Exception Shieldingを使用して、WCF検証例外以外のすべての例外をキャッチすることは可能ですか?そうでない場合は、スローされる可能性のあるすべてのさまざまな例外に対して、さらに多くの構成を追加する必要があります。この場合の例外シールドのポイントは何ですか?

4

2 に答える 2

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>

于 2011-11-17T16:51:04.240 に答える
0

ライブラリにバグがあり、提供したソリューションが機能しなくなります。回避策は、例外シールドブロックのデフォルトのポリシー名を変更しないことです。

このバグに投票を追加するには、このリンクを参照してください。

于 2011-12-26T15:09:41.277 に答える