首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BizTalk ESB门户-异常处理

BizTalk ESB门户-异常处理
EN

Stack Overflow用户
提问于 2012-09-11 08:49:57
回答 3查看 3.2K关注 0票数 2

我在BizTalk方面有一定的经验,但对ESB工具包还很陌生。我们实际上并不需要ESB解决方案本身,但我想使用ESB Portal来显示错误、修改消息和重新提交。

  • 据我所知,我已经成功地在我的dev机器上正确地安装和配置了ESB工具包。
  • 我通过启用失败消息的路由,并通过创建消息(例如:FaultMessage = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage(); )从业务流程中向门户发送错误。

消息在门户中正确显示,在选择“编辑”时,我可以通过WCF OnRamp、SOAP OnRamp和HTTPReceive重新提交。这就是我的问题开始的地方。我一直在使用WCF OnRamp重新提交,在此过程中我收到了一条消息:

此消息已成功重新提交。

但是,在返回门户的主屏幕时,我现在对Microsoft.Practices.ESB应用程序有了一个新的错误:

代码语言:javascript
复制
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的完整端到端异常处理?我设法找到了大量的帮助,让消息进入它,但不是配置为重新提交。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-18 08:53:48

WCF OnRamp使用ItinerarySelectReceiveXml管道,可以将其配置为指向行程或业务规则,因此可以根据消息类型和内容轻松地路由消息。

我现在的问题是,在我们的安装过程中,有一个第三方在我前面,所以我现在正在考虑创建一个新的OnRamp,并配置ESB,以便在它的重新提交列表中获取它。

票数 2
EN

Stack Overflow用户

发布于 2012-09-11 16:44:58

巧合的是我今天也想把这件事做好..。

如果您将WCF入口匝道的接收管道组件配置上的行程解析器连接字符串设置为使用Itinerary STATIC:\headerRequired=true;(而不是true:\headerRequired=false;),那么您将在事件查看器中得到以下消息:

行程名称是必需的,没有提供。

这意味着自定义SOAP头中不存在行程。

我还使用Fiddler (在关闭了ESB.Portal和BizTalk接收位置中的消息安全性)跟踪消息。没有行程自定义SOAP头。

在研究了ESB.Portal代码之后,我在MessageResubmitter.cs中找到了原因:

代码语言:javascript
复制
   [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)创建一个(或修改现有的)通用的WCF OnRamp,以使用BRE来确定与重新提交的消息相关联的行程。然而,这可能变得很复杂,因为您需要创建规则,以便能够处理从行程中的任何步骤中重新提交的任何消息。2)修改ESB.Portal的代码,使其能够将行程+当前步骤作为自定义SOAP头重新发送。

我可能会选择第二种选择。

票数 5
EN

Stack Overflow用户

发布于 2014-06-05 12:13:20

我们最近也遇到了类似的问题。当我们将行程导出到本地数据库并进行部署时,ESB将无法找到行程。

结果,我们现场的一位顾问修改了esb.config中的esb.config文件,以便在服务器上而不是本地机器上查找行程。

因此,如果像我一样,您确信这些行程被导出到正确的位置,并且已经部署好了,那么修改esb.config连接字符串。

代码语言:javascript
复制
<connectionStrings>
    <add name="ItineraryDb" connectionString="Data Source=.;Initial Catalog=EsbItineraryDb;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionString>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12366012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档