處理內送 AS2 訊息
AS2 接收管線會透過 AS2 處理內送訊息。 AS2EdiReceive 接收管線會使用 EDI 解譯器處理 EDI 編碼的訊息。 AS2Receive 接收管線會使用 AS2 解譯器處理非 EDI 編碼的訊息。 這兩種管線會處理 AS2 訊息的內容並以不同的方式產生 MDN,然而兩種接收管線都是使用 AS2 解碼器處理 AS2 訊息。
AS2EdiReceivePipeline 處理含 EDI 內容的 AS2 訊息時,會先完成所接收訊息的 AS2 處理再執行 EDI 處理。 管線產生 AS2 訊息之 EDI 內容的 EDI 通知時,必須以非同步方式傳回 EDI 通知,因為 AS2 回應已關閉連線。
接收埠
HTTP 接收埠是用於接收含 EDI 或非 EDI 內容的 AS2 訊息。 如果 MDN 必須以同步方式傳回,接收埠就必須是要求-回應連接埠。
MDN 可以用同步或非同步的方式傳回。 這取決於 AS2 訊息的 Disposition-notification-to 標頭,除非在 [合約屬性] 對話方塊的 [單向 AS2 合約] 索引標籤中選取[使用驗證的合約設定] 和 [MDN],而不是選取訊息標頭屬性。 如果選取屬性,則會在 [合約屬性] 對話方塊的 [單向 AS2 合約] 索引標籤的[傳送者 MDN 設定] 頁面中的[要求非同步 MDN] 屬性決定 MDN 傳回 MDN 的方式。 如需詳細資訊,請參閱 AS2 訊息 和 MDN 訊息。
若 MDN 將以同步方式傳回,則 MDN 就會透過雙向接收位置的傳送埠傳回。 這個 MDN 是做為 HTTP 回應,例如 200OK 表示成功接收訊息。
若 MDN 將以非同步方式傳回,MDN 就必須透過不同的傳送埠傳回。 如果使用動態傳送埠,MDN 將會傳送給 Disposition-notification-to 標頭中包含的位址。
注意
用來接收 AS2 訊息的雙向接收埠不應該用來接收 MDN 訊息。 MDN 訊息應該透過靜態單向接收埠接收。 針對以非同步方式傳回的 MDN 使用要求/回應接收埠,會讓 200OK 訊息無法在回應內送 MDN 時傳回,導致系統不必要重試 MDN 傳輸作業。
AS2 接收管線如何運作
AS2 接收管線處理內送 AS2 訊息時的步驟,如下所示:
在 [合約屬性] 對話方塊的 [單向 AS2 合約] 索引標籤的 [識別碼] 頁面,將訊息的 AS2 標頭中 AS2-From 值與 [AS2-From] 清單的值相符,以決定傳送方。 若比對失敗,就會嘗試比對針對內送訊息設定的 AS2-From 內容屬性和合作對象名稱,藉此判斷傳送合作對象。 如果找到相符專案,並在 [合約屬性] 對話方塊的 [單向 AS2 合約] 索引標籤中選取驗證和 MDN 的 [使用合約設定],而不是選取訊息標頭屬性,BizTalk Server將會使用與合約相關聯的 AS2 屬性,讓合作物件處理 AS2 訊息。 若未選取此屬性,接收管線將會使用內送訊息中的 AS2 標頭標記。 若未找到協議,則管線會中止處理、擱置訊息,並引發例外狀況。
注意
驗證和 MDN 的 [使用合約設定] 而非訊息標頭屬性可讓您驗證傳入訊息是否具有簽署、加密和壓縮屬性,如果這些屬性是在單向合約) 的 [驗證] 索引標籤中指定,則為 (,如果不是,則為暫停訊息並張貼錯誤。 這些變更必須與傳送端合作對象的協議交涉。 如需詳細資訊,請參閱 設定 AS2 屬性。
若已決定傳送端合作對象的協議,但接收管線試圖處理 AS2 訊息時發生錯誤,則管線會將 AS2 訊息的內容屬性 MessageDestination 設定為 SuspendQueue。 接收管線接著會擱置 MessageBox 內的訊息。 接收管線也會將
EdiIntAS.IsAS2FailedMessage
內容屬性設定為 True。 如果在 [合約屬性] 對話方塊的 [單向 AS2 合約] 索引標籤的 [寄件者 MDN 設定] 頁面中設定[要求 MDN] 來啟用 MDN,則管線會將適當的 MDN 傳回給寄件者。 管線只要收到要求就一定會傳回 MDN。判斷訊息是否重複,如果在 [合約屬性] 對話方塊的 [單向 AS2 合約] 索引標籤的 [驗證] 頁面中選取 [檢查重複訊息]選項中的重複訊息。 重複的訊息偵測是透過將輸入訊息上的 AS2-From、AS2-To 和 Message-ID 值比對到先前收到的訊息值來完成。 如果這三個值都相符,接收管線會將內容屬性的值
EdiIntAs.IsAS2MessageDuplicate
設定為 true。 如果 [驗證] 頁面上也選取 [暫停重複訊息] 選項,訊息將會暫停並記錄錯誤。擷取每一個附件的檔案名稱 (如果有的話),並將其升級為內容屬性。
若已在單向 AS2 協議屬性中啟用,則複製訊息 (以電傳格式) 並將複本儲存在不可否認性的接收資料庫中。
執行 MIME 處理,包含驗證簽章並將訊息解密 (以標頭標記為基礎)。
若所接收的是壓縮訊息,請解壓縮。
產生 HTTP 回應,再以同步要求-回應的模式附加於 MDN,或以非同步的模式當成獨立式回應傳送。
若經請求,請產生 MDN 回應。 如果已設定 驗證和 MDN 的合約設定, 或是未設定該屬性,則管線會產生以合約屬性為基礎的 MDN。 若組態設定和內送訊息的標頭不一致,管線就會產生負 MDN。
若訊息為 EDI 編碼且已啟用通知,AS2EdiReceive 接收管線內的 EDI 解譯器就會產生 EDI 通知。 管線會將 EDI 通知路由至 MessageBox,動態傳送埠從 MessageBox 收取通知後,再以非同步的方式將它傳送出去。 EDI 通知永遠都是透過 AS2 傳輸以非同步的方式傳送出去,因為 MDN 或 HTTP 回應都是以同步的方式傳送。
若已在單向 AS2 協議屬性中啟用,就複製 MDN 並將它儲存在不可否認性的接收資料庫中。
若已在單向 AS2 協議屬性中啟用,則複製解碼的訊息,並將複本儲存在不可否認性的接收資料庫中。
若發生 AS2 錯誤,則不會進一步處理接收的訊息。 然而接收管線仍會產生 MDN 回應。