天天看點

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

源代碼見 http://wcfextension.codeplex.com/

注意:

1) 本來沒打算這麼早開源,這隻是一個比較原始的實作,請勿直接在商業環境使用

2) 請注意本架構的授權條款Apache License 2.0

3) 本架構依賴的外部程式集或架構版權歸原作者所有

4) 架構之後可能會增加很多功能,請關注項目首頁即使獲得最新資訊

解壓縮代碼打開sln檔案後可以看到這樣的結構

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼
1) WcfExtension就是核心架構:
Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

Client檔案夾放的是用戶端用到的一些代碼,Server自然是服務端用到的一些代碼

Log是日志相關的一些代碼(四種日志),Config是配置相關的代碼

Setting是架構本身設定的一些代碼(比如配置是否要記錄日志)

其它代碼放在父檔案夾内,當然這裡還放了一些用于釋出nuget包的檔案

至于nuget不想多介紹了(release方式編譯項目後會在ReleasePackages生成nupkg包)

2) WcfExtension.ConfigCenter就是配置服務和配置的背景,配置檔案中需要配置

A)redis的位址以及通知通道名

B)sql server配置資料庫的連接配接字元串

C)配置服務的wcf服務端配置

這裡需要注意幾點:

A)如果你的配置不希望儲存在sql server中,可以重寫WcfConfigService.cs

B)現在的背景非常簡易,就是一個WFWcfConfig.aspx,完全可以重寫

3) WcfExtension.LogCenter就是日志服務和日志的檢視背景,需要配置的東西和2)差不多,隻不過注意要使用不同的端口

WcfLogService.cs同樣是一個簡單的實作,僅供參考,現在實作過程如下:

A)儲存到記憶體隊列

B)幾個線程定時批量把資料儲存到mongodb中

有關ConfigCenter和LogCenter還需要注意,在生産環境中為了高可用性可以使用IIS來承載tcp的wcf服務,做負載均衡。

但是為了測試簡單,在解決方案中有兩個臨時的Console應用程式,用于替代ConfigCenter和LogCenter。

4) WcfExtension.Clients.Console是測試的控制台用戶端,應該隻依賴WcfExtension架構和服務契約也就是WcfExtension.Services.Interface

5) WcfExtension.Hosts.Console是測試的控制台服務端,需要依賴服務接口和服務實作,以及WcfExtension架構

6) WcfExtension.Services.Interface是服務契約,定義了一些簡單的測試方法

7) WcfExtension.Services.Implementation是服務實作,其下的LogService是用來測試服務依賴注入的

8) Libs目錄下是一些依賴的程式集,主要是redis的用戶端、mongodb的用戶端以及unity、log4get、nuget。

因為,可以這麼啟動項目進行測試:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

先啟動配置服務和日志服務,然後啟動服務端,最後啟動用戶端。

在運作起來之前,還需要建立表結構和模拟資料(如果怕麻煩可以直接回複包裡面的WcfConfig.bak資料庫檔案),運作WcfExtension.ConfigCenter中的db.sql來建立資料表。

可以直接打開表配置資料也可以使用配置背景,首先建立一個綁定Binding:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

然後建立一個服務端點ServiceEndpoint,對應這個綁定:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

然後建立一個服務Service:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

然後建立服務的叢集ServerFarm:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

最後是用戶端的端點ClientEndpoint:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

和用戶端通路叢集的權限ClientAccess:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

啟動四個項目後可以看到:

Wcf通訊基礎架構方案(六)解決方案說明以及源代碼

1) 日志服務控制台上出現了各種日志

2) 用戶端和服務端都顯示出了發送和接受的消息

3) 如果在背景修改配置,并且點選通知按鈕,用戶端和服務端應該會收到修改通知,然後删除相應的緩存或重新開機服務使得配置立即生效

(其實在生産環境中,不太可能通知服務端重新開機服務)

該說的前面幾次都說了,代碼并不複雜,看代碼就都可以了解了。

作者:

lovecindywang

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。