《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于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網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美伊人久久大香线蕉综合69| 一本色道久久88综合日韩精品| 亚洲精品乱码久久久久| 韩国美女久久| 国产欧美一区二区三区在线看蜜臀| 欧美精品在线极品| 欧美黄色影院| 欧美高清在线视频观看不卡| 久久亚洲色图| 久久综合一区二区| 久久综合色播五月| 久久综合网络一区二区| 免费成人av在线| 欧美成人资源| 欧美精品乱人伦久久久久久| 欧美好骚综合网| 欧美日韩高清在线| 欧美四级在线观看| 国产精品福利在线观看| 国产精品乱子久久久久| 国产精品美女主播| 国产视频一区在线| 一区二区三区在线高清| 亚洲大片av| 亚洲美女在线视频| 亚洲图中文字幕| 亚洲欧美变态国产另类| 午夜精品短视频| 亚洲国产成人tv| 亚洲乱码精品一二三四区日韩在线| 亚洲精品国产视频| 一区二区av在线| 亚洲欧美在线磁力| 久久成人精品| 免费久久99精品国产| 久久精品99国产精品酒店日本| 久久精品99国产精品| 免费亚洲一区二区| 欧美日韩成人一区二区| 老**午夜毛片一区二区三区| 欧美顶级大胆免费视频| 欧美日韩亚洲一区在线观看| 国产精品伦一区| 国产一区二区丝袜高跟鞋图片| 在线欧美日韩国产| 99在线精品视频| 午夜在线播放视频欧美| 亚洲国产另类久久精品| 一本久久精品一区二区| 欧美一级网站| 欧美一区在线直播| 欧美va天堂va视频va在线| 欧美日韩一区二区三区在线看| 国产精品一区久久久| 激情文学综合丁香| 亚洲精品一二区| 亚洲欧美久久久| 亚洲欧洲一区| 亚洲欧美在线免费观看| 久久影院午夜论| 欧美日韩中文字幕在线视频| 国产亚洲欧美日韩日本| 亚洲国产专区校园欧美| 亚洲视频一区二区| 亚洲黑丝在线| 午夜视频一区在线观看| 美女日韩在线中文字幕| 国产精品v亚洲精品v日韩精品| 国产一区二区三区高清播放| 国产一区欧美| 亚洲精品久久久久久久久久久久| 亚洲欧美日韩在线高清直播| 亚洲精选久久| 久久精品午夜| 欧美午夜影院| 在线欧美福利| 欧美亚洲日本国产| 中文久久精品| 女生裸体视频一区二区三区| 国产精品一二| 亚洲精品自在久久| 亚洲国产精品一区| 小嫩嫩精品导航| 欧美日韩国产精品专区| 国内自拍一区| 亚洲综合不卡| 一区二区三区免费在线观看| 久久婷婷影院| 国产欧美综合一区二区三区| 亚洲作爱视频| 亚洲乱码国产乱码精品精可以看| 久久精品国产综合| 国产精品女人毛片| 日韩亚洲综合在线| 亚洲日本中文字幕区| 久久精品国产亚洲一区二区三区| 国产精品久久97| 亚洲免费大片| 日韩一二三区视频| 欧美丰满少妇xxxbbb| 精品成人在线视频| 久久www成人_看片免费不卡| 新片速递亚洲合集欧美合集| 欧美深夜影院| 99人久久精品视频最新地址| 亚洲精品国产精品国自产观看浪潮| 久久资源在线| 一区二区三区在线免费视频| 欧美在线一级视频| 久久精品综合| 国产日韩欧美综合| 香蕉久久精品日日躁夜夜躁| 亚洲欧美视频在线观看| 欧美视频中文一区二区三区在线观看| 亚洲激情成人网| 亚洲精品女av网站| 欧美丰满高潮xxxx喷水动漫| 亚洲高清不卡在线| 亚洲欧洲综合另类在线| 免费人成精品欧美精品| 黄色国产精品| 亚洲国内自拍| 欧美成人一区二区三区| 亚洲大胆人体视频| 亚洲伦理在线观看| 欧美极品aⅴ影院| 亚洲精品一级| 亚洲一区不卡| 国产精品久久久久秋霞鲁丝| 在线视频你懂得一区| 亚洲综合色自拍一区| 国产精品伦一区| 亚洲欧美日韩精品久久| 欧美自拍偷拍| 黑人一区二区| 亚洲精品国产精品乱码不99按摩| 欧美国产第二页| 亚洲精品三级| 亚洲综合第一页| 国产欧美日本一区二区三区| 欧美一级在线视频| 久久人人九九| 亚洲国产精品一区二区www| 一本大道久久a久久精二百| 欧美婷婷六月丁香综合色| 亚洲一区二区视频| 久久久av水蜜桃| 在线看无码的免费网站| 99热精品在线观看| 国产精品久久久久久久一区探花| 亚洲小说欧美另类婷婷| 欧美在线亚洲在线| 在线播放精品| 正在播放亚洲一区| 国产精品一区免费观看| 久久精品动漫| 欧美美女视频| 亚洲一区二区三区精品动漫| 久久久天天操| 亚洲精品国产精品国产自| 亚洲欧美视频在线观看| 国内精品伊人久久久久av一坑| 亚洲欧洲综合| 国产精品久久久久久久久久久久久| 性欧美8khd高清极品| 麻豆久久婷婷| 宅男在线国产精品| 久久久亚洲国产天美传媒修理工 | 国产在线欧美日韩| 亚洲精选成人| 国产精品欧美日韩久久| 亚洲第一福利视频| 欧美日韩国产欧| 午夜欧美不卡精品aaaaa| 欧美 日韩 国产在线 | 亚洲午夜激情免费视频| 久久精品1区| 日韩亚洲一区二区| 久久蜜桃香蕉精品一区二区三区| 最新国产成人av网站网址麻豆 | 国产精品多人| 亚洲国产精品一区二区第四页av| 欧美日韩一区二区免费在线观看| 午夜欧美大尺度福利影院在线看| 欧美成人免费视频| 亚洲视频一区在线| 欧美jjzz| 西西裸体人体做爰大胆久久久 | 欧美日韩国产精品专区| 欧美一区成人| 欧美日韩美女| 亚洲成在线观看| 国产精品麻豆va在线播放| 亚洲乱亚洲高清| 经典三级久久| 欧美一区二区大片| 夜夜嗨一区二区三区| 欧美本精品男人aⅴ天堂| 欧美亚洲综合网| 国产精品乱码人人做人人爱|