《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于WCF和對等網絡的即時通信軟件的設計與開發
基于WCF和對等網絡的即時通信軟件的設計與開發
來源:微型機與應用2013年第22期
董袁泉
(沙洲職業工學院, 江蘇 張家港215600)
摘要: 介紹了Microsoft用于構建分布式面向服務架構的新一代框架WCF(Windows Communication Foundation)的體系結構與技術要素;同時分析了對等網絡(Peer-to-Peer network)的基本原理和網格化特性。在分析WCF和P2P網絡優點的基礎上開發了一個即時通信軟件,總結了使用.NET平臺開發P2P應用的基本步驟,闡述了對等網絡是開發P2P應用的理想平臺。
Abstract:
Key words :

摘  要: 介紹了Microsoft用于構建分布式面向服務架構的新一代框架WCF(Windows Communication Foundation)的體系結構與技術要素;同時分析了對等網絡(Peer-to-Peer network)的基本原理和網格化特性。在分析WCF和P2P網絡優點的基礎上開發了一個即時通信軟件,總結了使用.NET平臺開發P2P應用的基本步驟,闡述了對等網絡是開發P2P應用的理想平臺。
關鍵詞: WCF; SOA; 對等網絡; 網格化; 即時通信

    對等網絡P2P(Peer to Peer)也稱為對等連接,是一種新的通信模式。P2P網絡的一個重要目標就是讓所有的客戶端都能提供資源,包括帶寬、存儲空間和計算能力。因此,當有節點加入且對系統請求增多,整個系統的容量也增大。這是目前客戶機/服務器(C/S)結構不能實現的。
    P2P的應用開發是分布式網絡開發的一種典型應用,軟件開發難度較大,WCF(Windows Communication Foundation)作為微軟基于SOA所推出的.NET平臺下的新一代框架產品集成了現有技術的優點。本文將綜合利用對等網絡和WCF實現一個即時通信軟件,采用WCF快速、便捷地開發P2P應用。
1 WCF概述
    WCF整合了Com+、.Net Remoting、WebService等現有技術的優點,提供了一種構建安全可靠的分布式面向服務系統的統一的框架模型,使軟件開發人員在開發分布式應用時變得更加輕松[1]。
1.1 面向服務
    WCF是一套面向服務的框架。服務是指暴露在外的一系列功能的集合,面向服務則是指一套構建“面向服務程序”的抽象原則以及最優方法[2]。基于WCF的程序設計考慮更多的是提供和使用服務。
    WCF擁有一個非常靈活的分層體系結構,它的目標是在單個框架中提供編碼、托管、消息傳遞模式、網絡連接、安全性和互操作性,這有助于簡化分布式應用程序的開發[3]。
1.2 WCF的編程模型
    WCF服務是通過端點通信的。WCF服務的端點充當與其他應用程序通信的網關。它是發送或接收消息的位置,包含交換消息所需的所有信息。端點由地址、綁定以及契約三部分組成[4],如圖1所示。

    地址制定該服務所駐留的位置,它表示為URL形式。綁定描述了WCF服務如何與客戶端應用程序通信。契約是對WCF服務所提供功能的聲明。契約公開服務的接口、類、方法和變量,以使客戶端應用程序能夠訪問和使用它們。
2 P2P對等網絡
    在P2P對等網絡中,將由對等節點組成的集合稱為網格(mesh)。任何一個對等節點都可以通過指定終節點(Endpoint)的方法來加入到一個網格中。網格是彼此之間可以相互通信并由唯一的網格ID標識的對等節點的命名集合。網格中的活動節點發布其網格名稱,以便其他節點可以找到它們。
    解析程序服務可以獲取網格ID,然后返回與向該特定網格ID注冊的節點對應的地址列表。解析程序保持已注冊地址的列表,此列表是它通過讓網格中的每個節點向該服務注冊而創建的。
    對等解析程序(PNRP)負責將網格ID解析為網格中節點的終節點地址[5]。在打開一個對等節點后,它會使用對等解析程序將網格ID解析為網格中其他對等節點的地址列表。這會創建一個由互連節點組成的網格,從而允許通過網格傳播消息。
3系統的設計與實現
3.1系統總體設計

    P2P應用程序的設計與普通分布式應用程序不同,在設計時必須考慮到應用程序本身既是服務的提供方同時也是服務的調用方。軟件整體結構如圖2所示[6]。

    每個加入到P2P對等網絡節點的客戶端可以通過EndPoint來加載WCF的服務契約并發布出去,但是整個對等網絡中沒有中央服務器的存在,所以節點與節點之間相互發現和通信比較困難,P2P對等網絡通過稱為PNRP的名稱解析的服務來解決這樣的問題。
3.2 服務端程序的設計
    服務端主要的功能是創建一個CustomPeerResolverService類型的ServiceHost代理,啟用對等解析程序(PNRP),還負責提供服務主機的基址,該基址在配置文件(App.config)中進行配置。經過配置之后,服務便可以由客戶端的計算機在該基址訪問。具體代碼如下:
      using System.ServiceModel.PeerResolvers;
//添加對等名稱解析協議服務
       ……
     CustomPeerResolverService cprs;       
                 //聲明自定義對等解析程序服務的變量
       ServiceHost host;   //聲明服務代理類
       ……
     cprs=new CustomPeerResolverService();  //初始化變量
     host=new ServiceHost(cprs);
     在配置文件(App.config)定義一個終節點,使客戶端可以與服務進行通信。使用NetTcpBinding進行綁定。
      App.config配置如下:
     <endpoint address="net.tcp://localhost/P2PChatServer" binding="netTcpBinding"… ></endpoint>
      經過配置之后,服務便可以由客戶端在 net.tcp://localhost/P2PChatServer處訪問。
3.3 客戶端加入網格
     要實現P2P對等網絡中的節點相互通信,首先需要創建和注冊同級,其他同級需要查找和訪問已注冊的同級。
      需要特別注意的是網格中的每臺計算機既可以作為客戶端又可以作為服務器,那么設計所要實現的契約時,應將契約的回調契約指定為其自身。這樣無論是調用方還是被調用方都能夠實現相同的操作,使得每臺計算機既能充當客戶端又能成為服務端[6]。創建契約的代碼如下:
 [ServiceContract(CallbackContract=typeof(IChatService))]
                             //將回調契約定義為本身
 public interface IChatService
  {
    [OperationContract(IsOneWay=true)]
     void DoSomeWork;                           //實現相應的功能
     }
    使用WCF中的DuplexChannelFactory<T>泛型類創建一個雙向通道來實現雙向調用。使用該通道的CreateChannel()方法來創建通信通道的一個實例。整個對等名稱解析過程是由netPeerTcpBinding綁定封裝的,在創建通道的同時,會在網格中注冊節點,使得節點加入網格[6]。代碼如下:
     InstanceContext context=new InstanceContext(this);
                                            //上下文實例
    Factory=new DuplexChannelFactory<IChatChannel>(context,"ChatEndPoint");  

                        //創建雙工通信
  Channel =Factory.CreateChannel();                //創建通道
3.4 網格中的計算機獲取節點標識
    當網格內有新的節點加入或退出時必須發送一個消息,這樣新的節點能查找到網格內其他的節點。只有網格內所有的節點有一個唯一的標識,才能實現對特定節點服務的調用,實現網格中客戶端點對點的相互通信。因此在編寫客戶端服務契約時必須包含獲取網格節點的方法以及提供節點加入或退出網格的事件處理代碼。
    通過DuplexChannelFactory<T>創建的雙向通信能夠調用客戶端服務契約的方法,當有新的節點加入網格時通過調用通道實例中的Join()方法將節點的標識傳遞給網格內其他節點。
    由于在服務端App.config文件中定義了統一的基地址,所以對通道方法的調用是對網格內所有節點的調用,因此網格內其他節點就可以發現新加入的節點。具體實現的方法如下:
    delegate void UserJoined(stringname);//聲明加入網格代理
    static event UserJoined NewJoin;     //定義加入網格事件
    public void Join(stringmemberName)
     {
     if(NewJoin!=null)
     {
   NewJoin(memberName);
    }
     }
    …
   Channel.Join(this.userName)
   當有節點退出網格時,與加入網格時一樣聲明一個退出網格事件代理,然后調用通道實例中的Leave()方法,退出網格;具體實現代碼與加入網格相似。
    網格中節點之間消息的傳遞也可以聲明一個消息發送事件代理,在發送時可以加入自身的標識作為參數,以便其他人能夠識別。
4 系統的測試與運行
    系統的開發工具選擇Visual Studio 2010,程序編譯通過后,首先打開即時通信服務端軟件,然后單擊開始,服務啟動成功,如圖3所示。

 

 

     在兩臺客戶端計算機上分別運行即時通信客戶端軟件并且輸入用戶名,點擊Join按鈕后節點會在網格中注冊并獲取網格中其他節點的標識,此時兩臺計算機作為兩個節點成功加入到網格中。在圖4中,一臺計算機成功地接收到了另一臺計算機自身登錄名稱和它所發送的消息。

    本文介紹了如何使用WCF來開發P2P應用程序。P2P應用程序開發成本低并且擁有較好的并發處理能力,適用于小規模的網絡,維護容易;但是對等網絡同時也存在一些不足和缺點,如資源分享紊亂、管理較難、安全性較低等問題。雖然還存在著一些問題和不足,但P2P對等網絡依然是開發點對點應用的一個理想平臺。
參考文獻
[1] 閆冰.基于WCF的分布式應用開發[J].電腦知識與技術,2008,3(1):68-70.
[2] 孫耀.基于WCF的網格化信息管理系統的研究與實現[D]. 長春:東北師范大學,2009.
[3] 程湯培. 基于WCF的即時通信軟件的設計與實現[J].  電腦編程技巧與維護,2008(4):24-40.
[4] 陳茹. WCF框架下分布式系統的集成技術研究[D].大連:大連海事大學,2010.
[5] 羅小平.基于PNRP協議的PeerChannel共享存儲模型的研究與應用[D].成都:西南石油大學,2011.
[6] 王麗麗,戴迪,王成江.Windows對等網絡上P2P應用程序的設計與實現[J].計算機與信息技術,2009(3):36-40.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 四虎影院海外永久 | 男人私人影院免费看视频 | 国产精品视频久久久久久 | 91精品在线国产 | 五月花精品视频在线观看 | 成年人免费小视频 | 国产在线精品福利一区二区三区 | 久草资源视频 | 99视频在线精品免费 | 丁香天堂网 | 国产精品久久久久久久9999 | 99热这里只有精品国产动漫 | 久99久热只有精品国产99 | 国产视频自拍一区 | 激情五月婷婷小说 | 久久99精品国产 | 日本久久综合视频 | 久久久免费的精品 | 狠狠躁夜夜躁人人爽天天3 欧美日日夜夜 | 五月婷婷激情四射 | 嫩草影院发布页 | 99视频在线观看视频 | 精品国产免费久久久久久 | www.久| 久久国产精品久久久 | 免费特黄一区二区三区视频一 | 欧美精品久久久亚洲 | 伊人草久久 | 亚洲午夜久久久 | 久久有码中文字幕 | 日本最新免费二区三区 | 免费视频 久久久 | 久久青草网站 | 黄视频在线免费 | www.国产.com | 欧美视频一 | 国产一级片免费看 | 欧美激情精品久久久久久久久久 | 国产成人三级经典中文 | 999无色码中文字幕 999视频精品全部免费观看 | 国产精品久久久久久久y |