2012-09-11 33 views
2

我在BizTalk方面经验丰富,但是对于ESB工具包来说是新手。我们并不需要这样的ESB解决方案,但我希望使用ESB门户来显示错误,修改消息并重新提交。BizTalk ESB门户 - 异常处理

  • 据我所知,我已经成功地在我的开发机器上正确安装和配置了ESB工具包。

  • 我已设法通过使一个业务流程内路由失败消息,并从发送错误到门户通过由此产生的消息:FaultMessage = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage();

这些消息在门户和上选择'正确显示编辑'我可以选择通过WCF OnRamp,SOAP OnRamp和HTTPReceive重新提交。这是我的问题开始的地方。我一直在使用WCF匝道重新提交,并在这方面,我得到一个消息:

此消息已成功重新提交

但是在返回到门户我现在有一个主屏幕对于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门户完整的端到端异常处理?我设法找到了很多帮助来获取消息,但没有配置重新提交。谢谢。

回答

2

的WCF匝道采用ItinerarySelectReceiveXml管道这可以配置为指向的行程或业务规则,因此该消息可以根据其消息类型和轻松路由内容。 Reroute errors via pipeline

我现在的问题是,第三方到了那里我之前对我们的安装,所以我现在正在研究建立新的匝道和配置ESB门户网站,挑选了在其重新提交名单。

5

巧合的是,我想今天也使这项工作...

如果设置在行程解析连接字符串的WCF匝道的接收管道组件配置为使用【行程-STATIC:\ headerRequired = TRUE; (而不是【行程-STATIC:\ headerRequired = FALSE),那么你会得到在事件查看器以下消息:

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

含义行程ISN不存在于自定义SOAP头中。

我还使用Fiddler(关闭ESB.Portal和BizTalk接收位置中的消息安全性)跟踪了从ESB.Portal进入的消息。没有行程自定义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不会将行程重新发送为BizTalk的自定义SOAP标头。

目前,我可以考虑以下选项来完成此项工作: 1)创建(或修改现有的)通用WCF OnRamp以使用BRE来确定与重新提交的消息相关联的行程。然而,这可能会变得复杂,因为您需要创建您的规则才能处理从您的行程中的任何步骤重新提交的任何消息。 2)修改ESB.Portal的代码,以便能够重新发送行程+当前步骤作为自定义SOAP标头。

我可能会为选择2

+0

不错的工作,将不胜感激,看看你是如何最终解决这个问题的。 – RedEyedMonster

0

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

事实证明,我们现场的顾问修改了ESB Toolkit中的esb.config文件,以便在服务器而不是本地计算机上查找行程。

所以,如果像我一样,确定路线正在被导出到正确的位置并且它们已被部署,请修改esb.config连接字符串。

<connectionStrings> 
    <add name="ItineraryDb" connectionString="Data Source=.;Initial Catalog=EsbItineraryDb;Integrated Security=True" providerName="System.Data.SqlClient" /> 
</connectionString>