2011-06-22 7 views
2

私は現在のプロジェクトでピンクになっています。契約に従うことを拒否する統合パートナーがあり、同じヘッダーと契約上有効なメッセージ本文を含むWSDL定義のメッセージ契約ではなく、カスタムヘッダーでの障害契約が予想されます。 FaultExceptionを単に投げることができるので、WCFでSOAP障害を送信することは問題ではありません。実際のバインドは、カスタムヘッダーがフォルトに含まれている必要があります。 OperationContextを使用してカスタムヘッダーをシリアル化することはできましたが、統合パートナーに必要な方法をシリアル化しません。発信FaultExceptionのSOAPエンベロープヘッダーにデータコントラクトを書き込む?

OperationContext.Current.OutgoingMessageHeadersを使用すると、ヘッダーに含めるオブジェクトを含むカスタムMessageHeader<T>を作成することができます。これは、POCO、DataContract、またはMessageContractにすることができます。メッセージコントラクトを使用する場合、名前空間は無視されるように見えますが、シリアライズされたメッセージには、メッセージの各メンバーに無効なxmlns =属性が多数含まれています(これも問題です)。 MessageHeaderが作成されると、.GetUntypedHeader(name, namespace)メソッドを呼び出すと、OperationContextのOutgoingMessageHeadersに追加できるMessageHeaderが生成されます。問題は、ヘッダーにオブジェクトを直接追加することができないことです。GetUntypedHeaderメソッドにはラッパー要素の名前と名前空間が必要であるため、明らかには常ににする必要があります。

<SOAP-ENV:Header> 
     <imsx_syncResponseHeaderInfo xmlns="http://www.imsglobal.org/services/lti/xsd/CoreOutcomesService_bv1p0"> 
     <imsx_version>UNUSED</imsx_version> 
     <imsx_messageIdentifier>12345678-abcd-1234-ef00-1234567890ab</imsx_messageIdentifier> 
     <imsx_statusInfo> 
      <imsx_codeMajor>failure</imsx_codeMajor> 
      <imsx_severity>error</imsx_severity> 
      <imsx_messageRefIdentifier>12345</imsx_messageRefIdentifier> 
      <imsx_description>yadda yadda some error message here</imsx_description> 
      <imsx_codeMinor> 
       <imsx_codeMinorField> 
        <imsx_codeMinorFieldName>SomeCodeName</imsx_codeMinorFieldName> 
        <imsx_codeMinorFieldValue>somecode</imsx_codeMinorFieldValue> 
       </imsx_codeMinorField> 
      </imsx_codeMinor> 
     </imsx_statusInfo> 
     </imsx_syncResponseHeaderInfo> 
    </SOAP-ENV:Header> 

それは、ヘッダ、imsx_syncResponsHeaderInfoは、3つのつの子要素を持っているという事実のためではなかった場合、我々はおそらく、ビジネスに次のようになります。次のように

必要なヘッダがあります。しかし、3つの別個のオブジェクトをラップするメッセージヘッダーを直接作成することは不可能であり、IsWrapped=falseのMessageContractを使用すると、imsx_syncResponseHeaderInfo要素のすべての直接子要素は、不正な名前空間を定義するxmlns属性でシリアル化されます。サービス契約のTNS)。これにより、契約スキーマに従ってヘッダーが無効になり、消費者はそれを逆シリアル化できません。

WCFで配信されたSOAPフォールトの送信メッセージヘッダーにMessageContractを追加する方法はありますか。ラップする必要はありません。子要素はそれぞれ独自のxmlns属性サービス契約のTNS?

+0

これまでの解決策はありましたか?私はまったく同じ問題に遭遇し、解決できません。 –

+0

問題は、ビジネスパートナーがメッセージの内容をどのように逆シリアル化していたかが原因でした。彼らは当時の問題に責任を負うことを望んでおらず、私のチームと私は負担が減りました。私たちは最終的に自分たちの問題を解決することができたので、実際に問題を解決する必要はありませんでした。 – jrista

答えて

0

上で述べたように:

問題は、実際にビジネスパートナーが私たちのメッセージの内容をデシリアライズされた方法によるものでした。彼らは当時の問題に責任を負うことを望んでおらず、私のチームと私は負担が減りました。私たちは最終的に自分たちの問題を解決することができたので、実際に問題を解決する必要はありませんでした。

関連する問題