次の方法で共有


オーケストレーションの実行時エラーのデバッグ

このセクションでは、オーケストレーションに関する実行時の問題の解決に役立つ一連の質問と回答を示します。

親によって開始された直後の子オーケストレーションに送信を行うと、断続的なサブスクリプション エラーが発生するのはなぜでしょうか。

サブスクリプションが見つかりませんでした、というサブスクリプション エラーは、競合状態の結果です。 競合状態は、プロセスの結果が実行順序によって変わる場合に発生します。 この場合、競合状態が発生するのは、親によって送信されたメッセージを受信する時点で、まだ子オーケストレーションが開始されていないときです。

この問題を回避するには、子オーケストレーションが開始されてメッセージを受信できる状態になったときに、子オーケストレーションから親にメッセージを返すようにします。 この方法にすれば、子オーケストレーションを開始した親オーケストレーションが、メッセージを送信する前に受信者の存在を認識できます。

動的送信ポートを論理ポートに接続すると、エラーが発生するのはなぜでしょうか。

動的ポートは、割り当てるポートの属性と特性のすべてを継承するようには設計されていません。 動的ポートは、アドレスを取得するだけであり、論理ポートに関連付けられているその他の情報は継承しません。

たとえば、"配信通知 = 送信済み" 状態の論理ポートに動的送信ポートを接続した場合、ランタイムは配信通知を配信しません。 XLANGs ランタイムが配信通知を待機するのは、実際にポートがそのように静的に設定されている場合のみです。

Note

XLANGs では、ポートは静的に構成されているものとしてのみ動作します。

カスタム コンポーネントを含むオーケストレーションの展開後にアプリケーションを実行しようとすると、ファイルまたはアセンブリ名、あるいはその依存関係の 1 つが見つかりません、というエラーが発生するのはなぜでしょうか。

このエラーは、通常、BizTalk オーケストレーション エンジンがカスタム コンポーネントを見つけられないことを示しています。 アプリケーションをホストするコンピューターのグローバル アセンブリ キャッシュに、BizTalk アプリケーションに含まれているすべてのアセンブリをインストールする必要があります。

オーケストレーション経由で Web サービスにドキュメントを送信する際に、AssemblyName コンテキスト プロパティが無効でした、というエラーが発生します。

問題

オーケストレーション経由でドキュメントを Web サービスに送信すると、AssemblyName コンテキスト プロパティが無効です、というエラーが発生します。

原因

BizTalk アプリケーションは、当初、オーケストレーションを介入せずに "メッセージング" アプローチを使用して設計されました。 このようなソリューションでは、送信ポート フィルターを使用して受信ポートと送信ポートをリンクするので、ドキュメントは受信時に送信ポートに渡されます。 その後、ソリューションは、送信ポートにバインドされているオーケストレーションを含むように変更されました。

解決方法

送信ポートのフィルターを削除します。 オーケストレーションにバインドされている送信ポートにフィルターを適用すると、多くの場合、メッセージがオーケストレーションをバイパスするので、コンテキスト プロパティ エラーが発生します。

オーケストレーションでマルチパート MIME メッセージを処理する際に、"WrongBodyPartException" が発生します。

問題

マルチパート MIME メッセージをオーケストレーションに受信すると、 WrongBodyPartException 例外が発生します。

原因

このエラーは、部分の順序が誤って指定された場合、または指定された部分の位置にメッセージが準拠していない場合に発生します。 たとえば、3 番目の部分にボディ部を指定している場合に、到着したメッセージの 3 番目の位置がヘッダー部であるときなどです。

解決方法

ボディ部のインデックス設定が正しいことを確認し、アダプター経由で到着するすべてのメッセージがその設定と一致するようにします。 オーケストレーションを停止することで (ただし参加は継続)、オーケストレーション内で失敗する MIME メッセージのコンテンツを調査できます。この方法では、メッセージが強制的に公開されるので、管理コンソールを使用してメッセージを調べて、部分の順序を確認することができます。

マルチパート MIME メッセージ部分が見つかりません。

問題

インデックス値が 0 より大きい MIME メッセージ パーツを取得しようとすると、BizTalk Server ランタイムで "インデックス = <値>を持つマルチパート メッセージが見つかりません" のようなエラーがスローされます。

原因

このエラーの最も一般的な原因を次に示します。

  • MIME メッセージの部分が想定された数に足りません。

  • MIME メッセージが正常に解析できませんでした。

解決方法

この問題は、メッセージ ソースから取得するメッセージ部分が、想定される範囲内の部分のみになるようにすることで解決できます。 解析の問題の場合、元の MIME メッセージの構造に誤りがなく、正しく構築されているか確認する必要があります。 不定期に解析の問題が起こる場合、オーケストレーションに適切な例外ハンドラーがあるか確認します。

動的送信ポートを使用して送信を行うと、"FILE 送信アダプターがファイルを書き込み用に開けません" というエラーが表示されます。

問題

動的送信ポートを使用して送信するときに、BizTalk Server イベント ログに "FILE 送信アダプターでファイル <ファイル名>を書き込むことはできません" というエラーが表示されます。

この問題は、BTS の場合に発生します 。OutBoundTransportLocation プロパティはオーケストレーション式で定義され、ファイル トランスポートが指定されています。たとえば、次の式を使用すると、実行時にこのエラーが発生します。

Message2=Message1;  
Message2(BTS.OutboundTransportLocation) = "file:///c:/test/out";  
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);  

- または -

Message2=Message1;  
Message2(BTS.OutboundTransportLocation) = "file://mymachine/test/out";  
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);  

原因

この問題は、実行時にオーケストレーション エンジンが指定された URL からテキスト "file://" を 削除するため発生します。 したがって、先ほどの例では、"file:///c:/test/out" は \c:\test\out と評価され、"file://mymachine/test/out" は mymachine\test\out と評価されます。

解決方法

BTS の URL を指定する場合 。式の OutBoundTransportLocation プロパティ。必要に応じて"/" 文字を追加または削除します。 BTS の上の例を使用します 。OutBoundTransportLocation プロパティは "file://c:/test/out" として定義する必要があります。これは c:\test\out または "file:////mymachine/test/out" と評価され、\\mymachine\test\out と評価されます。