接收配接器的交換模式
接收配接器會接收來自「線路」的資料,並將它當做訊息送出至BizTalk Server。 此提交流程可以是單向或雙向的訊息交換模式。
單向提交
當接收配接器將訊息提交給 BizTalk 傳訊引擎時,首先需要建立新的 BizTalk 訊息。 IBaseMessage 主題的程式碼範例將告訴您怎麼進行。 由配接器設為訊息內文的資料流一般來說應為 Forward-Only 資料流,意思是它不會對先前讀入記憶體的資料進行快取處理。
配接器將訊息提交至引擎之前,它必須將系統命名空間中的 InboundTransportLocation 訊息內容屬性寫入 BizTalk 訊息。 下列程式碼片段將說明這點:
Assembly References:
Microsoft.XLANGs.BaseTypes.dll
Microsoft.BizTalk.Pipeline.dll
Microsoft.BizTalk.GlobalPropertySchemas.dll
using Microsoft.BizTalk.Message.Interop;
using Microsoft.XLANGs.BaseTypes;
private static readonly PropertyBase InboundTransportLocationProp =
new BTS.InboundTransportLocation();
private void StampMsgCtxProps(
IBaseMessage msg, string uri, string adapterType)
{
msg.Context.Write(
InboundTransportLocationProp.Name.Name,
InboundTransportLocationProperty.Name.Namespace,
uri);
}
此外,配接器也可以定義自己的屬性結構描述,並將與藉以接收訊息之結束點相關的訊息內容屬性寫入。 例如,HTTP 配接器可以將 HTTP 標頭寫入訊息內容,而 SMTP 接收器則可以將郵件主旨寫入訊息內容中。 對於諸如管線元件、協調流程排程,或是傳送配接器等下游元件而言,這項資訊可能會很有用。
當訊息準備好之後,就可以提交至「傳訊引擎」。 若要查看單向接收配接器如何將訊息提交至引擎,請參閱程式碼範例SubmitDirect (BizTalk Server 範例) 。
要求-回應
雙向接收配接器一般是用在單向或雙向接收埠上。 配接器會檢查BizTalk Server組態屬性包,判斷其服務所在的接收位置是單向或雙向埠。 此程式會在UI 指引和開發人員 API 命名空間參考中的IBTTransportConfig.AddReceiveEndpoint 方法 (COM) 中說明。
下列物件互動圖表說明執行「要求-回應」訊息交換的流程。 配接器會向傳輸 Proxy 要求新的批次,並透過SubmitRequestMessage方法傳入其 IBTTransmitter介面的參考。 傳訊引擎會使用 TransmitMessage 方法,在此介面上傳遞回應訊息。
由於引擎在處理訊息時並不同步,有可能會發生下列情況:
BatchComplete回呼可能會在完成傳回之前發生。
對 TransmitMessage 的呼叫可能在 BatchComplete,甚至在 Done 傳回之前便已發生。
由於這兩種情況極為罕見,配接器應該避免這類事情發生。
我們建議您使用非同步且無法停止的呼叫來傳輸回應訊息。
BaseAdapter 專案具有公用程式類別 StandardRequestResponseHandler,可封裝本主題中所述的要求-回應語意。
要求-回應訊息逾時
當配接器提交要求要求訊息時,必須在UI 指引和開發人員 API 命名空間參考中指定IBTTransportBatch.SubmitRequestMessage 方法上的要求訊息逾時 (COM) API。 回應訊息只有在不超出此逾時值時才會傳遞至配接器上。 一旦超出了逾時值,便會將負值通知 (NACK) 傳遞到配接器上,而非回應訊息。 如果配接器沒有指定逾時值,則引擎會使用預設的 20 分鐘逾時值。
您可以透過使用下列登錄機碼來控制內含式接收配接器的預設「要求-回應」訊息逾時值:
DWORD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTSSvc{Host Guid}\MessagingReqRespTTL
外掛式接收配接器之登錄機碼位於不同的位置上:
DWORD
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTSSvc.3.0\MessagingReqRespTTL
NACK (負值通知,Negative ACKnowledgements) 是 SOAP 錯誤,有兩種處理的方法。 一般來說配接器會將 NACK 傳回用戶端,讓用戶端來處理 NACK。 或者,可以設定負責處理回應訊息的傳輸管線,並使用對應或是自訂管線元件來變更回應訊息的內容。