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