Web サービスに送信するメッセージを Biztalk で作成しようとしています。C#からWebサービスを呼び出すと、(フィドラーからの)トラフィックが基本的に次のように表示されます。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:AuthenticationInfo xmlns:h="urn:Ticket" xmlns="urn:Ticket" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<userName>user_name</userName>
<password>password</password>
<authentication/>
<locale/>
<timeZone/>
</h:AuthenticationInfo>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CreateTroubleTicket xmlns="urn:Ticket">
<ServiceID>asd</ServiceID>
<ServiceType>service Type</ServiceType>
<Impact>1</Impact>
<Priority>1 - Critical</Priority>
</CreateTroubleTicket>
</s:Body>
</s:Envelope>
これは期待される応答を返します。これを BizTalk で機能させる方法についてオンラインで説明を見つけました。SOAP ヘッダー ( http://threaddump.blogspot.com/2005/01/how-to-send-soap-headers-in-biztalk.html、またはhttp://www.apress.com/9781430232643がある場所) を追加します。 2.13章のウォークスルーとコード)と私はそれらに従いました。ただし、上記のヘッダーを作成できませんでした。ビジネスが Web サービスに送信するときに、体だけがフィドラーを介して送信されます。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><ns0:CreateTroubleTicket xmlns:ns0="urn:Ticket">
<ns0:ServiceID>ServiceID_0</ns0:ServiceID>
<ns0:ServiceType>ServiceType_0</ns0:ServiceType>
<ns0:Impact>1</ns0:Impact>
<ns0:Priority>1 - Critical</ns0:Priority>
</ns0:CreateTroubleTicket></s:Body></s:Envelope>
必要な文字列に割り当てられたプロモートされたプロパティを取得できます。これを知っているのは、中断されたメッセージ (サービスから正当な応答を取得できなかった後) を見ると、メッセージ コンテキストで指定した値を持つそのプロパティが表示されるからです。
ここまでたどり着くために私が何をしたかを明確にするために。ターゲット名前空間 ' http://schemas.microsoft.com/BizTalk/2003/SOAPHeader ' と、'MessageContextPropertyBase' に設定されたプロパティ スキーマ ベースを持つ 'AuthenticationInfo' という名前の単一要素を持つプロパティ スキーマを追加しました。次に、これをオーケストレーションでメッセージの昇格したプロパティに次のように割り当てます。
MessageInwHeader(TempBizConsumeHeader.AuthenticationInfo)= @"<ns0:AuthenticationInfo xmlns:ns0=ur..."
したがって、誰かがここで何か問題を見つけた場合、またはリクエストでこのヘッダーが実際に表示されない理由を知っている場合は、お知らせください。特別な送信パイプラインが必要なのか、それともエンベロープ全体を定義する必要があるのでしょうか? WCF サービス (私が呼び出しているものではない) には、既製のプロパティ、WCFOutboundHeaders などがあると思います。私が使用できるものの1つがあればいいのに...