2009-07-22 8 views
0

私のWCFサービスにEnterprise Library Validation Application Blockを使用しています。すべてがうまくいき、.NetコンシューマはFaultException<ValidationFault>例外をキャッチして、人間が読めるビジネスエラーのコレクションを取得できます。しかし、非ネット消費者、特に生のSOAPメッセージを見ようとしている人にとっては、それほど魅力的ではありません。 SOAP Reasonテキストは常に "です。このフォルトの作成者は理由を指定していません。" であるため、これはあまり有用ではありません。理由は、フォルトメッセージの例に示すように<Detail>要素以下。WCF EntLib検証 - 既定のSOAPフォールト理由テキストを変更します

テキストを変更する方法は、「このフォールトの作成者が理由を指定していない。を」「参照ValidationFault詳細」のような、より便利なものにありますか?

<s:Body> 
    <s:Fault> 
     <s:Code> 
     <s:Value>s:Sender</s:Value> 
     </s:Code> 
     <s:Reason> 
     <s:Text xml:lang="en-GB">The creator of this fault did not specify a Reason.</s:Text> 
     </s:Reason> 
     <s:Detail> 
     <ValidationFault xmlns="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <Details xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF"> 
       <b:ValidationDetail> 
        <b:Key i:nil="true"/> 
        <b:Message>Value Validator</b:Message> 
        <b:Tag>request</b:Tag> 
       </b:ValidationDetail> 
      </Details> 
     </ValidationFault> 
     </s:Detail> 
    </s:Fault> 
</s:Body> 
+0

私は同じ問題があります。私はWCFのエンタープライズライブラリvalidationbehaviourを使用してそれを行う方法がないと思う。 – softveda

+0

ええ、私はStackOverflowの日の前にこれを少し前に調べましたが、これは私が来た結論でしたが、私はここにチェックして投稿すると思っていました! –

答えて

3

EntLibの人々はこの1つを考えていなかったようまあ、それはそうです。私は、EntLibコードの変更がどこにあるのか、そしてissue at their CodePlex siteを挙げる必要があるのか​​を指摘しました。私はこれもEntLibContribプロジェクトの一環として誰でも行うことができると思いますが、私は4.1を使っていますが、まだエンタープライズライブラリ3.1にいるようです。

誰かが必死なら、EntLibソースコードをダウンロードし、ValidationParameterInspectorクラス(Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF名前空間内)のBeforeCallメソッドを変更することが解決されると思います。ここにFaultExceptionが作成されます。このコンストラクタへのオーバーロードにより、FaultReasonを指定できます。

+1

これは、設定から 'FaultReason'を引き出すべき場所です。 –

0

WCFサービスはどのようにこれらのフォルトを生成していますか?

WCFのFaultExceptionクラスを見ると、SOAP障害のFaultReasonを指定できるconstructorsなど、さまざまな方法があります。

マルク・

+0

はい、しかし、EntLibの検証は私のサービス実装コードの前に始まります。このサービスは、検証が行われた後に発生したエラーを処理し、SOAP Faultsでそれらを包み込むことができますが、検証はこれより少し前に行われます。 –

+0

ただし、この場合、FaultExceptionはエンタープライズライブラリによって作成され、ユーザーコードでは明示的に作成されません。 – softveda

+1

次に、エンタープライズライブラリのコードをカスタマイズして戻したい場合があります。私は構成エントリから理由を取得することをお勧めします。 –

関連する問題