1

wcf-sql アダプターから受信した SQL Server データから受信したデータをループしようとしています。

私は for ループと以下を使用します

itostring=i.ToString();
MessageOne=xpath(MessagePolling,"/*[local-name()='MainData' and namespace-uri()='http..["+itostring+"]");

XPath が最初の受信メッセージ パスの場合 [i]

これは正しい方法ですか?

4

1 に答える 1

6

BizTalk が受信した Xml メッセージに含まれる複数のレコードをループするには、次の 2 つの方法があります。

エンベロープ スキーマ

メッセージを表すスキーマを定義するときは、それをエンベロープ スキーマとしてマークします。これにより、受信パイプライン逆アセンブラーは、受信メッセージ (この場合は WCF-SQL アダプターから) のレコードごとに 1 つのメッセージを BizTalk メッセージ ボックスに作成 (および公開) するように指示されます。これにより、受信メッセージのレコードごとに 1 つのオーケストレーション インスタンスが開始されます。

Richard Seroter は、WCF-SQL アダプターからこれを行うことに関する素晴らしいブログ投稿をしています - http://seroter.wordpress.com/2010/04/08/debatching-inbound-messages-from-biztalk-wcf-sql-adapter/

このアプローチでは、BizTalk が停止してしまうため、着信メッセージから何万ものレコードをデバッチしたくないことに注意してください :-)

オーケストレーション内の XPath

エンベロープ スキーマを使用しない場合は、着信メッセージ (複数のレコードを含む) に対して単一のオーケストレーション インスタンスを開始します。オーケストレーションの Expression Shape 内で、XPath (およびその他の魔法) を使用して、各レコードをループし、それぞれをオーケストレーション変数に抽出できます (その後、マッピングすることができます)。

XPath による抽出に役立つ次のリンクをご覧ください。

^BizTalk Server 2009 の時点でこれを達成するための 3 番目の方法もあります (私が思うに、かなり前のことのように思えます)。これにより、オーケストレーション内で受信パイプラインを実行できるため、Orch でエンベロープのバッチ処理を実行できます。受信場所の受信パイプラインの代わりに。

于 2013-07-05T10:27:00.880 に答える