2

私は現在のプロジェクトで少し困っています。コントラクトへの準拠を拒否している統合パートナーがいます。彼らは、同じヘッダーと契約上有効なメッセージ本文を含む WSDL 定義のメッセージ コントラクトではなく、カスタム ヘッダーを使用したフォルト コントラクトを期待しています。単純に をスローできるため、WCF で SOAP エラーを送信しても問題ありませんFaultException。実際のバインドは、フォールトにカスタム ヘッダーが含まれているという要件です。を使用してカスタム ヘッダーをシリアル化できましたがOperationContext、統合パートナーが必要とする方法ではシリアル化されません。

を使用OperationContext.Current.OutgoingMessageHeadersすると、ヘッダーに含めるオブジェクトを含むカスタムを作成できMessageHeader<T>ます... POCO、DataContract、または MessageContract にすることができます。メッセージ コントラクトを使用すると、名前空間が無視されるように見え、シリアル化されたメッセージには、メッセージの各メンバーに無効な xmlns= 属性が多数含まれます。これも問題です。MessageHeader が作成されると、.GetUntypedHeader(name, namespace)メソッドを呼び出すMessageHeaderと、OperationContext の OutgoingMessageHeaders に追加できる が生成されます。問題は、ヘッダーにオブジェクトを直接追加できないことです... 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 つの個別のオブジェクトをラップするメッセージ ヘッダーを直接作成することは不可能であり、MessageContract を で使用するとIsWrapped=false、要素のすべての直接の子要素が、正しくない名前空間を定義する属性でimsx_syncResponseHeaderInfoシリアル化されます (xmlnsサービス契約)。これにより、契約上のスキーマに従ってヘッダーが無効になり、コンシューマーはヘッダーを逆シリアル化できなくなります。

WCF 配信の SOAP フォールトの送信メッセージ ヘッダーに MessageContract を追加する方法はありますか?契約する?

4

1 に答える 1