BizTalk ESBToolkit2.0の使用
DLLであるWebサービスへのプロキシを呼び出す必要があるプロジェクトに取り組んでいます。静的ポートを使用して、BizTalk管理インターフェイスのアセンブリを指すWebサービス設定でSOAPアダプターを使用するように構成できるため、オーケストレーションを介してこれを行うのに問題はありません。旅程では、動的ポートにはSOAPアダプターを使用するオプションがないため、これを行うための明確な方法はないようです。
これを実行したいのには十分な理由があります。心配しないでください。
これに続いて、カスタムアダプタプロバイダーを実装しましたが、動作させるのに問題があります。
ここに示す(古い)例に従いました:
カスタムアダプタプロバイダーはBaseAdapterProviderを継承し、SetEndPoint(Dictionary、IBaseMessageContext)メソッドをオーバーライドします。
このメソッドは、リゾルバーディクショナリを介して渡されたアセンブリ名、タイプ名、およびメソッド名を抽出し、それらをパイプラインコンテキストに書き込みます。
pipelineContext.Write("TypeName",
"http://schemas.microsoft.com/BizTalk/2003/soap-properties", typeName);
pipelineContext.Write("MethodName",
"http://schemas.microsoft.com/BizTalk/2003/soap-properties", action);
pipelineContext.Write("AssemblyName",
"http://schemas.microsoft.com/BizTalk/2003/soap-properties", assembly);
トランスポートタイプをsoapに設定します。
pipelineContext.Write("TransportType",
"http://schemas.microsoft.biztalk.practices.esb.com/itinerary", "SOAP");
他のすべての点で、アダプタプロバイダーは、SMTPからSOAPへの明らかな変更を除いて、上記のリンクに示されている例とほぼ同じです。
アダプタープロバイダーアセンブリは署名され、GACされ、esb.configに追加されます。
アダプター・プロバイダーは、サービスを呼び出してから応答を返すだけの旅程から呼び出されます。ツールキットに同梱されている旅程テストクライアントから旅程をテストしています。カスタムアダプタ内のイベントログは、アダプタコードが呼び出されていることを示しています。問題は、メッセージがサービスプロキシにルーティングされていないことです。イベントビューアで次のエラーが発生します。
メッセージングエンジンは、adapter:SOAP Source URL:/ESB.ItineraryServices.Response/ProcessItinerary.asmxによって送信されたメッセージの処理に失敗しました。詳細:サブスクライバーが見つからなかったため、公開されたメッセージをルーティングできませんでした。このエラーは、サブスクライブオーケストレーションまたは送信ポートが登録されていない場合、またはサブスクリプション評価に必要なメッセージプロパティの一部がプロモートされていない場合に発生します。この障害のトラブルシューティングには、Biztalk管理コンソールを使用してください。
グループ概要で一時停止されたサービスシステムを調査すると、2つのことがわかります。アセンブリ名、タイプ名、およびメソッド名の値が正しく設定されています。メッセージ本文がありません。送信ポートの送信パイプラインと受信パイプラインをXMLTransmit/XMLReceiveとItinerarySendPassthrough/PassthroughReceiveの両方に構成しようとしましたが、違いはありません。
私たちが見逃したかもしれない明らかな何かがありますか?メッセージ本文を明示的に渡す必要がありますか?もしそうなら、どのように?
編集:
BizTalk ESB Toolkitフォーラムからのリクエストに続いて、旅程、コンテキスト、および送信ポートフィルターのスクリーンショットを投稿しています。
ナイジェル、どうもありがとう。