WCF適配器各種費(fèi)類型化消息協(xié)定總結(jié)
WCF框架是由微軟研發(fā)的一款基于通信等方面的跨平臺的解決方案。在實際使用中,體現(xiàn)了非常強(qiáng)大的功能。WCF適配器在接收消息時使用非類型化消息協(xié)定。#t#
通過使用非類型化消息協(xié)定,WCF 適配器可從客戶端接收任何類型的 WCF 消息。您可通過 BizTalk 管理控制臺中的“入站 BizTalk 消息正文”選項指定如何從傳入 WCF 消息創(chuàng)建 BizTalk 消息。
下表中的 WCF 適配器服務(wù)協(xié)定用作 WCF 接收適配器的非類型化消息協(xié)定。
ITwoWayAsync 接口
用于 WCF 請求-響應(yīng)接收位置。WCF適配器異步處理通過此接口傳入的消息。
ITwoWayAsyncVoid 接口
用于不支持事務(wù)協(xié)議的 WCF 單向接收位置,WCF-NetMsmq 適配器除外。WCF適配器異步處理通過此接口傳入的消息。
ITwoWayAsyncVoidTxn 接口
用于支持事務(wù)協(xié)議的 WCF 單向接收位置,WCF-NetMsmq 適配器除外。WCF適配器異步處理通過此接口傳入的消息。
IOneWayAsync 接口
用于 WCF-NetMsmq 單向非事務(wù)性接收位置。WCF適配器異步處理通過此接口傳入的消息。
IOneWayAsyncTxn 接口
用于 WCF-NetMsmq 單向事務(wù)性接收位置。WCF適配器異步處理通過此接口傳入的消息。
BizTalkServiceInstance 類
實現(xiàn)WCF適配器用于接收傳入消息的服務(wù)協(xié)定。WCF 適配器為每個接收位置創(chuàng)建一個單獨(dú)的 ServiceHost 和此類的單個服務(wù)對象,以便在運(yùn)行 WCF 接收位置的 BizTalk 主機(jī)實例的生存期內(nèi)處理客戶端請求。該服務(wù)對象使用多個線程來并行處理消息,除非 WCF-NetMsmq 接收位置與所選定的“按序處理”屬性一起使用。
WCF 適配器根據(jù) WCF 接收位置中配置的通道堆棧,來選擇某個 WCF 服務(wù)協(xié)定以接收消息。
對于標(biāo)準(zhǔn) WCF 適配器,通道堆棧是由接收位置的 WCF 配置屬性自動配置的。為了確定使用哪個服務(wù)協(xié)定,WCF 適配器將針對 WCF 接收位置的綁定調(diào)用帶有 IReplyChannel、IReplySessionChannel 和 IDuplexSessionChannel 的 Binding.CanBuildChannelListener 方法。
如果任一方法調(diào)用返回 True,則使用以 ITwoWayAsync 開始的服務(wù)協(xié)定來確保至少一次送達(dá)。否則,將使用以 IOneWayAsync 開始的服務(wù)協(xié)定來接收消息。接著,WCF適配器將為以下情況選擇以 Txn 結(jié)尾的服務(wù)協(xié)定:
TransactionFlowBindingElement 被添加到啟用了事務(wù)流的通道堆棧。
MsmqTransportBindingElement 被添加到 ExactlyOnce 屬性設(shè)置為 True 的通道堆棧。
實現(xiàn) ITransactedBindingElement 的綁定元素被添加到 TransactedReceiveEnabled 屬性設(shè)置為 True 的綁定。
如果為 WCF 請求-響應(yīng)接收位置添加了 OneWayBindingElement,則通過該接收位置傳入的消息可能會丟失,因為 OneWayBindingElement 在將消息調(diào)度到WCF適配器之前即生成了一個虛擬響應(yīng)。