WCF發(fā)布訂閱實質(zhì)內(nèi)容剖析
WCF開發(fā)工具中,有一種比較重要的設(shè)計模式,叫做WCF發(fā)布訂閱模式。對于初學(xué)者來說掌握這一模式可能還是一件比較困難的事情。下面就讓我們一起看看他的一些基礎(chǔ)內(nèi)容,從而初步了解WCF發(fā)布訂閱的基本概念。#t#
WCF發(fā)布訂閱設(shè)計模式
我們可以使用已知的發(fā)布-訂閱設(shè)計模式對一些特定的功能進行設(shè)計。該模式所隱藏的含義很簡單:通過引入一個專門的訂閱服務(wù),以及一個專門的發(fā)布服務(wù),解除發(fā)布者與訂閱者之間的耦合,如圖B-1所示。
圖B-1 一個WCF發(fā)布訂閱系統(tǒng)
需要訂閱事件的訂閱者注冊訂閱服務(wù),該服務(wù)負責(zé)管理訂閱者列表,同時為取消訂閱提供了相似的功能。同樣,所有發(fā)布者均使用發(fā)布服務(wù)觸發(fā)它們的事件,避免將事件直接傳遞給訂閱者。訂閱和發(fā)布服務(wù)提供了一個間接層,從而解除了與系統(tǒng)之間的耦合。訂閱者不需要了解發(fā)布者的身份。它們能夠訂閱事件類型,以及接收任何發(fā)布者的事件,并且訂閱機制對于所有訂閱者都是統(tǒng)一的。事實上,發(fā)布者不需要管理任何訂閱列表,也不用關(guān)心訂閱者是誰。它們會將事件傳遞給發(fā)布服務(wù),然后再傳遞給需要事件的訂閱者。
WCF發(fā)布訂閱者類型
我們甚至可以定義兩種類型的訂閱者:臨時訂閱者是在內(nèi)存中運行的訂閱者;持久訂閱者則是持久化到磁盤的訂閱者,它們代表了服務(wù)對發(fā)生事件的調(diào)用時間。對于臨時訂閱者,可以使用雙向回調(diào)機制,通過它將回調(diào)引用傳遞到正在運行的服務(wù)。持久訂閱者則需要將訂閱者地址當(dāng)作引用進行記錄。當(dāng)事件發(fā)生時,發(fā)布服務(wù)會調(diào)用持久訂閱者的地址,然后將事件傳遞給它。兩種訂閱類型還有另外一個顯著區(qū)別,就是我們可以將持久訂閱者存儲在磁盤或數(shù)據(jù)庫中。這樣就能夠在關(guān)閉應(yīng)用程序或機器崩潰或重啟的時候,持久化訂閱者。這一過程允許以管理方式對訂閱進行配置。顯然,在關(guān)閉應(yīng)用程序時,我們不能存儲臨時訂閱,而需要在每次應(yīng)用程序啟動時,明確地創(chuàng)建臨時訂閱。