2

在我的編排中,我有各種步驟將平面文件映射到2箇中間消息並最終寫入SQL。首先,我沒有例外處理它,它使用了有效的輸入文件。BizTalk不斷要求初始化ALREADY初始化消息

   msg0  msg1  msg2 
┌──────┐ ┌─────┐ ┌───────┐ ┌───────┐ ┌─────┐ 
│ PIPE │-►│ RCV │-►│ MAP_1 │-►│ MAP_2 │-►│ SQL │ 
└──────┘ └─────┘ └───────┘ └───────┘ └─────┘ 

現在我試圖獲取每個範圍的異常,我使用地圖。 在編排開始時,在第一個接收形狀之後,我放置了一個Construct Message Shape,用於初始化編排中的所有消息。 我創建了catch塊(每個都有用於我的fault_msg及其發送形狀的Construct形狀),FILE端口和構建。

       msg0   msg1   msg2 
┌──────┐ ┌─────┐ ┌──────┬──┐ ┌───────┬──┐ ┌───────┬──┐ ┌─────┬──┐ 
│ PIPE │-►│ RCV │-►│ INIT │ex│-►│ MAP_1 │ex│-►│ MAP_2 │ex│-►│ SQL │ex│ 
└──────┘ └─────┘ └──────┴──┘ └───────┴──┘ └───────┴──┘ └─────┴──┘ 

VS不斷要求,甚至在該應進入已經填充(或填充,或任何術語)的消息映射塊味精初始化。 這是爲什麼?

編輯:我想通過BT想要每個msg初始化,即使在異常處理過程中沒有使用。所以我需要構建我的自定義錯誤消息,它將返回空的消息以及我的自定義錯誤消息。爲了初始化過程中的他們,我需要在表達代碼的開頭這樣來聲明:目前

unusedMsg.Part = new System.Xml.XmlDocument(); 

事情是:這個問題還是出來最後的映射(SQL):

  ┌──────────────────────┐ 
      │  scope   │ 
      │ ┌────────────────┐ │ 
┌──────┐ │ │  MAP  │ │ ┌────────┐ 
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │ 
└──────┘ │ └────────────────┘ │ └────────┘ 
      ├──────────────────────┤ 
      │   ex   │ 
      │ ┌────────────────┐ │ 
      │ │ construct │ │ ┌────────┐ 
      │ │ msg2 > msgERR │ │ -► │ msgERR │ 
      │ └────────────────┘ │ └────────┘ 
      └──────────────────────┘ 

它不停地問這一點:

msg2.Part「:消息部分尚未construct語句中初始化

但我確信msg2 IS INITIALIZED是因爲我沒有例外產生它,我正在進入新的範圍。 這可能怎麼樣?

回答

1

錯誤「的消息部分中構建語句尚未初始化」在BizTalk

  1. 你的構建體形狀構造相同的消息的源消息之一在下列情況下發生。 例如在下面,您需要從構建的消息中刪除msg2。

       CORRECT         WRONG 
         ┌──────────────────────┐    ┌──────────────────────┐ 
         │ CONSTRUCT MESSAGE │    │ CONSTRUCT MESSAGE │ 
         │ messages constructed │    │ messages constructed │ 
         │  sqlReq   │    │  sqlReq, msg2  │ 
         │ ┌────────────────┐ │    │ ┌────────────────┐ │ 
         │ │  MAP  │ │    │ │  MAP  │ │ 
         │ │ msg2 > sqlReq │ │    │ │ msg2 > sqlReq │ │ 
         │ └────────────────┘ │    │ └────────────────┘ │ 
         └──────────────────────┘    └──────────────────────┘ 
    
  2. 您在構建形狀構建多條消息,但隨後的消息是依賴於你初始化另一個消息早在缺少結構。

       CORRECT         WRONG 
         ┌──────────────────────┐    ┌──────────────────────┐ 
         │  Construct  │    │  Construct  │ 
         │ messages constructed │    │ messages constructed │ 
         │  sqlReq, sqlReq2 │    │  sqlReq, sqlReq2 │ 
         │ ┌────────────────┐ │    │      │ 
         │ │  MAP  │ │    │      │ 
         │ │ msg2 > sqlReq │ │    │      │ 
         │ └────────────────┘ │    │      │ 
         │ ┌────────────────┐ │    │ ┌────────────────┐ │ 
         │ │  MAP  │ │    │ │  MAP  │ │ 
         │ │sqlReq > sqlReq2│ │    │ │sqlReq > sqlReq2│ │ 
         │ └────────────────┘ │    │ └────────────────┘ │ 
         └──────────────────────┘    └──────────────────────┘ 
    

錯誤 「使用未構造消息的」 與發生以下情況。

  1. 您正在嘗試使用消息作爲既不是在範圍的範圍內的構建體形狀之前到開始也不初始化的範圍內的源。

  2. 您正嘗試在異常塊中使用消息,該異常塊在您試圖捕獲異常的範圍內初始化。

  3. 您在僅在某些範圍區域中構建的範圍之後使用消息。它需要在所有範圍內構建。

+0

這證實了我對待我的例外的方式沒有錯。由於與VS屬性選項卡可見性有關的原因,我沒有看到構造形狀也將msg2指定爲構建的消息之一(可能來自複製粘貼)。我會保留此作爲未來類似錯誤的參考!謝謝@Dijkgraaf – strongmmc

+0

我相應地修改了...它仍然要求這些未使用的消息。 Biztalk正在測試我的耐心和我對儀器動態的理解。 C#編譯器從不抱怨(不考慮警告)對於未使用的非實例變量。他們被命名,就是這樣......爲什麼一個工具要求實現在流程生命週期中不使用的東西的實例? – strongmmc

+0

@strongmmc在修復第一個錯誤之後,查看你的問題,你將使用未構造的消息觸及#3。您必須像處理try/catch塊一樣對待範圍。你的sqlReg和msgErr都只在作用域的一部分中創建,所以你不能在作用域之後使用。我會嘗試在我的答案中添加更多細節以突出顯示您可以使用的某些模式。附:你的範圍真的只有一張地圖嗎?我通常不會嘗試從單一形狀中捕捉錯誤。 – Dijkgraaf