大家都知道,一般能使用WCF的Callback Contract能實現聊天室。這篇文章我將使用WF4.0是實現我的傷心聊天室。先看效果,再講如何 實現和使用WF4.0的優勢,最後總結。界面很簡潔,請見諒。
效果篇:
首先啟動StartAChatRoom項目,開啟傷心聊天室如下圖:
登錄:
聊天主界面:
上圖的左邊有一個復選框,你可以選擇向哪些人發送信息。右上角是離開按鈕。點擊我要離開,就關閉你的聊天室客戶端。
麒麟發送信息:
美女A接受到信息,如下圖:
演示就到這裡,下面講述如何實現。
實現篇:
本文是利用了WF4.0裡面的WCF服務的雙工通信實現的,WF4.0裡面的雙工通信與WCF裡面的實現方法不一樣。詳細見下面兩篇文章:
Workflow 4 Services and duplex communications(譯文)
More Workflow 4 Services and duplex communications(譯文)
說到這裡,你應該很清楚是如何實現的了。對,還是利用了WCF技術。不過我還是要講述一下如何用WF4.0去實現的,這樣也能加深你對 WCF和WF的了解和以及它們之間的區別。
下圖是我的代碼的項目結構圖:
ChatRoomService是WCF Workflow Service Application項目
ChatRoom_Client是WindowsForm項目
StartAChatRoom是控制台應用程序。
下面我就說一下核心的邏輯,其他的部分詳見代碼。
我假設你和我一樣,對WCF稍微有些了解。否者就很難進行下去。:)
看下圖:
上圖可以看到傷心聊天室的邏輯了。它一共有6個方法:
1、開啟聊天室。
2、加入聊天室。
3、離開聊天室。
4、將消息發送給所有人。
5、將消息指定發送給某些人。
6、獲取本聊天室所有人員。
WF4.0的雙工通信的實現部分是在客戶段。
我在傷心聊天室的每個客戶段開啟一個WCF服務,代碼如下:
Random ro = new Random();
int point = ro.Next(8000, 9999);
ChatRoomCallback back = new ChatRoomCallback();
address = "http://localhost:" + point + "/ServiceCallback";
var serviceCallback = new ChatRoomCallback();
serviceCallback.MainFrm = this;
back.UISyncContext = SynchronizationContext.Current;
var host = new ServiceHost(serviceCallback, new Uri(address));
host.Open();
看上面代碼你就知道,我將客戶段的WCF服務的地址當參數傳入服務端。如果你對WF稍微有些了解,你就知道可以用Send活動去調用WCF 服務。
雙擊“加入聊天室”,看下面的截圖:
這樣已經很明白了,我的文章都提供了代碼下載,直接看代碼吧。:)
WF4.0優勢:可視化編程、直觀、簡單、設計時無代碼或者很少量的代碼。
總結:通過使用WF4.0實現了一個簡單的聊天室,我想這個Demo還可以擴展。
本文配套源碼