2012-09-11 34 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>