1.服務(wù)總線
運(yùn)行在組織內(nèi)部的應(yīng)用提供了WCF創(chuàng)建的Web此服務(wù),此服務(wù)可以連接到組織外部的軟件上。軟件通常運(yùn)行在Windows Azure這類云平臺或其他組織內(nèi)部。
在具體實(shí)現(xiàn)服務(wù)連接的過程中會出現(xiàn)很多問題。比如其他組織內(nèi)部的客戶端連接到Web服務(wù)時(shí),需要知道如何定位到服務(wù)的終端。其他組織的軟件請求需要確定如何通過服務(wù)器租用端的服務(wù)。網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Tanslation,NAT)是十分普遍的,應(yīng)用對外通常不會有一個(gè)固定的IP地址。那么,在沒有使用從NAT的情況下,請求需要確定如何通過防火墻。
AppFabrie中,服務(wù)總線(Service BUS)解決了這些問題,如圖4-21所示,一個(gè)WCF服務(wù)可以通過服務(wù)總線注冊終端,然后由客戶端發(fā)現(xiàn)和使用這些終端訪問服務(wù)。
開始時(shí),WCF服務(wù)注冊一個(gè)或多個(gè)服務(wù)總線的終端(圖4-21中步驟1)。對于每個(gè)注冊的終端,服務(wù)總線都會顯示其通信終端(步驟2)。服務(wù)總線分配一個(gè)URI口令給組織,組織通過這個(gè)服可以自由創(chuàng)建命名層次。這樣,終端就被分配了具體的URIs。
在提供了終端URI的情況下,客戶端可通過服務(wù)總線注冊(步驟3)發(fā)現(xiàn)終端。這個(gè)請求使用了Atom Publishing Protocol,并且返回了一個(gè)AtomPub服務(wù)參考文檔到代表應(yīng)用的終端服務(wù)總線上去。在上述工作完成后,客戶端可以調(diào)用通過上述顯示終端的服務(wù)操作(步驟4)。對于每個(gè)服務(wù)總線接受請求,調(diào)用WCF服務(wù)顯示的終端通信操作 (步驟5)。
用戶服務(wù)需要使用AppFabric服務(wù)總線的開放TCP連接顯示終端,并保持這個(gè)連接一直處于開放的狀態(tài),這就解決了兩個(gè)問題:一是解決了問題,服務(wù)總線上的開放連接可以路由到應(yīng)用程序;二是由于連接是在防火墻內(nèi)初始化的,所以通過連接將消息傳回應(yīng)用時(shí)防火墻不會阻止該消息。
服務(wù)總線也提高了安全性。由于客戶端只可以看見服務(wù)總線提供的一個(gè)IP地址,看不到內(nèi)部的IP地址。服務(wù)總線充當(dāng)了一個(gè)外部DMZ(Demilitarized,隔離區(qū))的角色,起到了間接阻止攻擊的作用。
通過服務(wù)總線展示其服務(wù)的應(yīng)用一般是使用WCF實(shí)現(xiàn),客戶端可以由或其他技術(shù)創(chuàng)建,比如Java等。這些客戶端創(chuàng)建完成之后,他們可以通過TCP、HTTP或者HTTPS發(fā)送請求。應(yīng)用同樣可以自由地使用自己的安全機(jī)制,比如加密、屏蔽通信攻擊等等
服務(wù)總線提供了以下一些有用的特征。
(1)支持消息緩沖。消息緩沖是通過一個(gè)簡單的隊(duì)列來實(shí)現(xiàn)的??蛻舳丝梢苑胖靡粋€(gè)多達(dá)256MB大小的消息到消息緩沖池中去,而不需要客戶端直接響應(yīng)服務(wù)。存儲消息持久存放在磁盤上,服務(wù)可以從磁盤上讀取這些被放置的消息。為了防止故障的發(fā)生,存放的消息通常需要進(jìn)行備份,與Windows Azure平臺上消息備份方式相同。
(2)多個(gè)WCF服務(wù)監(jiān)聽同一個(gè)URI。服務(wù)總線通過監(jiān)聽服務(wù)隨機(jī)傳播客戶端請求,為WCF服務(wù)提供負(fù)載均衡和容錯(cuò)能力。