0

WCF サービスにEnterprise Library Validation Application Blockを使用しています。すべて問題なく、.Net コンシューマーはFaultException<ValidationFault>例外をキャッチして、人間が判読できるビジネス エラーのコレクションを取得できます。ただし、.Net 以外のコンシューマ、特に未加工の SOAP メッセージを表示するコンシューマにとっては、あまり見栄えがよくありません。SOAP 理由のテキストは常に "この障害の作成者は理由を指定しませんでした。 " これはあまり役に立ちません。以下の障害メッセージの例に示すように、要素の下に理由が指定されているためです。<Detail>

「この障害の作成者は理由を指定しませんでした。 」というテキストを「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>
4

2 に答える 2

3

ええと、EntLib の人々はこれについて考えていなかったようです。私は、EntLib コードのどこを変更する必要があるかを指摘し、CodePlex サイトで問題を提起しました。これはEntLibContribプロジェクトの一部として誰でも行うことができると思いますが、私は 4.1 を使用しているのに対し、彼らはまだ Enterprise Library 3.1 を使用しているようです。

解決策は、EntLib のソース コードをダウンロードして、クラス (名前空間)のBeforeCallメソッドを変更することです。ここでが作成されます。このコンストラクターへのオーバーロードは、.ValidationParameterInspectorMicrosoft.Practices.EnterpriseLibrary.Validation.Integration.WCFFaultExceptionFaultReason

于 2009-07-22T14:49:04.267 に答える
0

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

WCFのFaultExceptionクラスを見ると、SOAP障害のFaultReasonを指定できるコンストラクターなど、それらの1つを構築する方法は多数あります。

マーク

于 2009-07-22T11:31:48.020 に答える