2

私は BizTalk の経験はかなりありますが、ESB ツール キットは初めてです。ESB ソリューション自体は必要ありませんが、ESB ポータルを使用してエラーを表示し、メッセージを変更して再送信したいと考えています。

  • 私の知る限り、開発マシンに ESB ツール キットを正しくインストールして構成しました。

  • 失敗したメッセージのルーティングを有効にしてポータルにエラーを送信し、次のようにメッセージを作成してオーケストレーション内から送信することができました。FaultMessage = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage();

メッセージはポータルに正しく表示され、[編集] を選択すると、WCF OnRamp、SOAP OnRamp、および HTTPReceive を介して再送信するオプションが表示されます。これが私の問題の始まりです。WCF OnRamp を使用して再送信していますが、そうすると次のメッセージが表示されます。

このメッセージは正常に再送信されました

ただし、ポータルのホーム画面に戻ると、Microsoft.Practices.ESB アプリケーションの新しいエラーが表示されます。

There was a failure executing the receive pipeline: "Microsoft.Practices.ESB.Itinerary.Pipelines.ItinerarySelectReceiveXml, Microsoft.Practices.ESB.Itinerary.Pipelines, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "ESB Itinerary Selector" Receive Port: "OnRamp.Itinerary" URI: "/ESB.ItineraryServices.WCF/ProcessItinerary.svc" Reason: Error 135008: The itinerary was not found in the repository. 

ここで何かを構成する必要があると思います。おそらくメッセージ用のリゾルバーですが、これまでのところ、この問題を解決するのに役立つガイドを見つけることができませんでした。ESB ポータルでの完全なエンド ツー エンドの例外処理を示すウォークスルーはありますか? メッセージを取得するための多くのヘルプを見つけることができましたが、再送信の構成については見つかりませんでした。ありがとう。

4

3 に答える 3

5

偶然にも、私は今日もこの仕事をしようとしていました...

WCF OnRampの受信パイプラインコンポーネント構成で旅程リゾルバー接続文字列を設定して、ITINERARY-STATIC:\ headerRequired=true;を使用する場合。(ITINERARY-STATIC:\ headerRequired = false;の代わりに)、イベントビューアに次のメッセージが表示されます。

旅程名は必須であり、提供されていません

旅程がカスタムSOAPヘッダーに存在しないことを意味します。

また、Fiddlerを使用してESB.Portalから送信されるメッセージをトレースしました(ESB.PortalとBizTalkの両方の受信場所でメッセージセキュリティをオフにした後)。旅程のカスタムSOAPヘッダーはありません。

ESB.Portalコードを調べた後、MessageResubmitter.csで原因を見つけました。

   [Serializable]
   public static class MessageResubmitter
   {
      /// <summary>
      /// Submits an XML message to the WCF OnRamp.  The URL of the WCF OnRamp is defined in the
      /// portal web.config.  Context properties are not resubmitted, they are expected to be
      /// applied by the receiving pipeline.
      /// </summary>
      /// <param name="doc">The XML document to submit.</param>
      /// <returns>True if the submission was successful, false if the submission failed.</returns>
      public static bool ResubmitWCF(XmlDocument doc)
      {
         try
         {
            ProcessRequestClient onRamp = new ProcessRequestClient();
            onRamp.SubmitRequest(**null**, doc.OuterXml);
            return true;
         }
         catch (Exception)
         {
            return false;
         }
      }

SubmitRequestの最初の引数は旅程であり、nullに設定されています。これは、メッセージを再送信するときに、ESB.PortalがカスタムSOAPヘッダーとして旅程をBizTalkに再送信しないことを意味します。

現時点では、これを機能させるために次のオプションを考えることができます。1)BREを使用して再送信されたメッセージに関連付ける旅程を決定する(または既存の)汎用WCFOnRampを作成します。ただし、旅程内の任意のステップから再送信されたメッセージを処理できるようにルールを作成する必要があるため、これは複雑になる可能性があります。2)ESB.Portalのコードを変更して、旅程+現在のステップをカスタムSOAPヘッダーとして再送信できるようにします。

私はおそらくオプション2に行きます。

于 2012-09-11T16:44:58.603 に答える
2

WCF OnRamp は ItinerarySelectReceiveXml パイプラインを使用します。これは、旅程またはビジネス ルールを指すように構成できるため、メッセージの種類と内容に応じてメッセージを簡単にルーティングできます。 パイプライン経由でエラーを再ルーティングする

私の問題は、私たちのインストールでサードパーティが私より前にそこに到達したことです。そのため、新しい OnRamp を作成し、再送信リストでそれを選択するように ESB ポータルを構成することを検討しています。

于 2012-09-18T08:53:48.763 に答える