• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于WCF的Silverlight繪圖聊天程序?qū)崿F(xiàn)

      2015-06-24 13:14:09鄒珺
      軟件導(dǎo)刊 2015年6期

      摘要:WCF技術(shù)能實(shí)現(xiàn)聊天功能。結(jié)合WCF服務(wù)配置以及Silverlight客戶端定義,調(diào)用WCF服務(wù)器端代理類,完成了繪圖功能和聊天記錄的發(fā)送。通過WCF的雙向通信機(jī)制實(shí)現(xiàn)了Silverlight繪圖聊天程序。

      關(guān)鍵詞:WCF;Silverlight;代理類;雙向通信;繪圖聊天

      DOIDOI:10.11907/rjdk.151124

      中圖分類號:TP3-0

      文獻(xiàn)標(biāo)識碼:A 文章編號

      文章編號:16727800(2015)006005402

      作者簡介作者簡介:鄒珺(1981-),女,江蘇蘇州人,碩士,蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院講師,研究方向?yàn)?NET軟件開發(fā)。

      0 引言

      WCF(Windows Communication Foundation,Windows通信基礎(chǔ))屬于.NET Framework框架中的通信層子框架,是微軟推出的用于開發(fā)面向服務(wù)架構(gòu)SOA應(yīng)用程序的基礎(chǔ)框架,整合了各種不同的分布式開發(fā)技術(shù),例如Web服務(wù)、.NET遠(yuǎn)程處理及Enterprise Services[1]等。

      1 WCF技術(shù)概述

      1.1 WCF技術(shù)開發(fā)模型

      WCF作為基于SOA面向服務(wù)架構(gòu)的一個(gè)通信框架產(chǎn)品,主要用于創(chuàng)建應(yīng)用程序服務(wù),而一個(gè)WCF服務(wù)又包含稱為ABC的3個(gè)部分。

      A是Address的簡稱,用于指定服務(wù)地址。每個(gè)WCF服務(wù)都有一個(gè)唯一的地址,該地址定義了服務(wù)的引用地址和傳輸協(xié)議。

      B是Binding的簡稱,中文稱為綁定。因?yàn)榭晒┩ㄐ诺姆绞胶芏?,比如可以是單向或雙向的通信,可以使用HTTP、TCP、P2P或IPC等。綁定提供了一些用于通信的封裝好的方式。

      C是Contract的簡稱,中文稱為契約,描述了服務(wù)所能提供的各種服務(wù)。

      WCF簡化了開發(fā)分布式應(yīng)用程序的復(fù)雜性,讓開發(fā)人員不再過度關(guān)注復(fù)雜的通信協(xié)議及數(shù)據(jù)交換,將所有精力放在業(yè)務(wù)邏輯的實(shí)現(xiàn)上[2]。

      1.2 繪圖聊天程序預(yù)覽效果

      打開聊天程序,要求用戶輸入一個(gè)名字進(jìn)行登錄,便于聊天室知道當(dāng)前聊天人員的信息,單擊“登錄”按鈕后,打開聊天程序的主窗體。

      主窗體左側(cè)是繪圖面板,底部是供繪圖的工具,包括畫筆、畫刷和基本形狀工具。頂部標(biāo)題欄下是位置區(qū),用戶可以設(shè)置線程、畫刷顏色和畫刷粗細(xì)等樣式,右側(cè)文本框用戶可以輸入聊天信息,當(dāng)用戶單擊“發(fā)送聊天信息”按鈕后,用戶的聊天信息將在所有的客戶端顯示。

      用戶在繪圖區(qū)域繪圖時(shí),所有使用該Silverlight聊天程序的客戶端都會實(shí)時(shí)顯示出繪圖筆記。當(dāng)有新用戶登錄或進(jìn)行繪圖操作后,聊天室底部的狀態(tài)欄面板上會顯示通知信息,可以知道當(dāng)前是哪位用戶在繪圖板上繪制了圖形。

      2 WCF服務(wù)器功能設(shè)計(jì)

      2.1 定義WCF服務(wù)契約

      WCF服務(wù)將宿主到IIS中,創(chuàng)建一個(gè)標(biāo)準(zhǔn)的用于承載Silverlight的ASP.NET項(xiàng)目:右擊該項(xiàng)目名稱,選擇“添加”|、“新建項(xiàng)”命令,在彈出的“添加新項(xiàng)”窗口中,選擇WCF服務(wù)項(xiàng),命名為DuplexDrawService.svc,VS會自動向項(xiàng)目中加入一個(gè)svc文件和一個(gè)IDuplexDrawService的契約定義文件。

      為了讓客戶端發(fā)送的消息能在多個(gè)客戶端窗口之間同步,使用WCF雙向通信綁定。雙向通信原理是:一般獲取數(shù)據(jù)使用的是客戶端調(diào)用服務(wù)端的方法來獲取數(shù)據(jù),而Duplex是將客戶端也當(dāng)作服務(wù)器,客戶端上的方法一樣可以使用。

      每當(dāng)客戶端通過HTTP協(xié)議連接到服務(wù)器端后,會向服務(wù)器注冊一個(gè)該客戶的名稱和回調(diào)接口到服務(wù)器端的字典中。當(dāng)客戶端發(fā)送聊天內(nèi)容或者進(jìn)行繪制時(shí),服務(wù)器端將查詢已連入的客戶端,使用回調(diào)機(jī)制調(diào)用客戶端的更新方法將數(shù)據(jù)推送到Silverlight客戶端,達(dá)到在一個(gè)地方發(fā)送信息,所有客戶端都能保持同步的效果[3]。

      2.2 定義WCF回調(diào)契約

      IDuplexDrawCallback接口用于定義WCF服務(wù)的回調(diào)契約,該接口向服務(wù)器端發(fā)送更新通知。

      2.3 實(shí)現(xiàn)服務(wù)契約

      IDuplexDrawService接口用來向客戶端發(fā)布WCF服務(wù),項(xiàng)目中的DuplexDrawService類提供IDuplexDrawService接口的實(shí)現(xiàn)。在類的聲明中,使用WCF服務(wù)為ServiceBehavior定義在客戶端調(diào)用服務(wù)器端的行為[4]。

      2.4 配置WCF服務(wù)器

      為了讓客戶端可以訪問,還需要定義WCF服務(wù)地址和綁定。

      (1)為了實(shí)現(xiàn)WCF的雙向綁定,需要引入System.ServiceModel.PollingDuplex.dll這個(gè)程序集,該程序集位于Silverlight SDK中。

      (2)需要在Web.config配置文件中添加對該程序集中定義的綁定擴(kuò)展,用戶可以使用綁定擴(kuò)展來創(chuàng)建用戶定義的綁定元素,并將其作為自定義綁定的一部分來使用。綁定擴(kuò)展時(shí)實(shí)現(xiàn)抽象類BindingElement的類型[5]。

      (3)用戶可以使用綁定擴(kuò)展bindingExtensions來創(chuàng)建定義的綁定,并將其作為終結(jié)點(diǎn)配置的一部分來使用。擴(kuò)展綁定是一個(gè)實(shí)現(xiàn)抽象類Binding的類型。在指定了綁定元素和綁定擴(kuò)展后,可以創(chuàng)建一個(gè)自定義的綁定類型。

      (4)配置中指定使用HTTP傳輸協(xié)議和二進(jìn)制消息編碼,并指定了查詢的一些參數(shù)設(shè)置。在定義綁定后,接下來定義服務(wù)行為來指定一些細(xì)節(jié)信息。

      (5)定義服務(wù)ABC,指定地址、綁定和契約,讓客戶端可以使用特定的地址訪問到服務(wù)。

      (6)出于安全考慮,Silverlight不支持跨域訪問服務(wù),需要在WCF的根目錄下放置一個(gè)XML策略文件,文件名為clientaccesspolicy.xml。

      通過上述定義,Silverlight客戶端就可以使用與其宿主ASP.NET文件路徑一致的方式訪問服務(wù)了。

      3 Silverlight客戶端功能設(shè)計(jì)

      3.1 添加對WCF服務(wù)的引用

      右擊Service References文件夾,從彈出的菜單中選擇“添加服務(wù)引用”命令,彈出添加服務(wù)引用對話框,單擊窗口上的“發(fā)現(xiàn)”|、“解決方案中的服務(wù)”按鈕,服務(wù)列表會列出在服務(wù)器端項(xiàng)目中已經(jīng)定義好的WCF服務(wù)。

      在服務(wù)的元數(shù)據(jù)中,對于定義在回調(diào)接口中的異步Notify()方法也提供了封裝。單擊確定按鈕后,會生成一個(gè)服務(wù)代理類位于Reference.cs文件中,這個(gè)代理類包含了WCF服務(wù)的同步或異步調(diào)用代碼,在客戶端只需要調(diào)用這些代碼就可以與WCF服務(wù)進(jìn)行交互[6]。

      3.2 實(shí)現(xiàn)DuplexClientHelper服務(wù)代理類

      DuplexClientHelper使用PollingDuplexHttpBinding與服務(wù)器端進(jìn)行通信,DuplexDrawServiceClient類提供了調(diào)用遠(yuǎn)程服務(wù)器對象的代碼,它提供了對遠(yuǎn)程服務(wù)器端操作契約方法的定義。DuplexClientHelper簡化了客戶端直接操作該代理類的復(fù)雜性,提供了一層封裝[7]。

      3.3 實(shí)現(xiàn)繪圖處理

      3.4 聊天記錄發(fā)送

      DrawingArea對象的AddObjects()方法中,如果ScreenObject類型是Text時(shí),會根據(jù)文本內(nèi)容實(shí)例化一個(gè)TalkItem對象,添加到ObservableCollection這個(gè)集合中,這樣便實(shí)現(xiàn)了客戶發(fā)送聊天內(nèi)容時(shí),所有客戶端都會同步顯示聊天信息的效果。

      用戶在聊天文本框中輸入聊天內(nèi)容、單擊“發(fā)送聊天信息”按鈕時(shí),聊天記錄被添加到MessageCollection集合中,然后一個(gè)異步的DrawAsync向服務(wù)器端發(fā)出,服務(wù)器端將回調(diào)所有客戶端通道,發(fā)送聊天通知信息。

      4 結(jié)語

      通過使用Silverlight與WCF的雙向通信技術(shù),實(shí)現(xiàn)了一個(gè)具有繪圖功能的聊天程序,其關(guān)鍵技術(shù)點(diǎn)在于WCF的雙向通信技術(shù)實(shí)現(xiàn)了服務(wù)器端向客戶端推送數(shù)據(jù)功能[8]。

      參考文獻(xiàn):

      [1]譚淇.基于WCF服務(wù)框架與Silverlight的Web應(yīng)用研究[J].計(jì)算機(jī)與現(xiàn)代化,2011(1):8990.

      [2]張學(xué)林,鐘志農(nóng),景寧,等.面向Silverlight的WCF服務(wù)優(yōu)化策略的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2011(20):1314.

      [3]黃森,劉豐.基于WCF的數(shù)據(jù)流傳輸方案研究與應(yīng)用[J].計(jì)算機(jī)安全,2009(12):3638.

      [4]彭新,劉永偉,葉長春.基于Flex和.NET開發(fā)RIA[J].軟件導(dǎo)刊,2010(6):127129.

      [5]李文滔.基于WCF架構(gòu)的應(yīng)用開發(fā)研究[J].計(jì)算機(jī)時(shí)代,2011(2):3436.

      [6]安磊,吳英俊,黃昕穎,等.基于Silverlight和WCF技術(shù)的實(shí)時(shí)數(shù)據(jù)圖形展示系統(tǒng)研究[J].浙江電力,2011(8):6569.

      [7]張若君,王力生.Silverlight與數(shù)據(jù)模型設(shè)計(jì)模式[J].科技傳播,2011(22):2125.

      [8]李愛民,劉晶,馬維綱.Silverlight相關(guān)技術(shù)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009(6):113115.

      責(zé)任編輯(責(zé)任編輯:杜能鋼)

      海口市| 德昌县| 江津市| 工布江达县| 凤台县| 德惠市| 卓资县| 明水县| 洪洞县| 怀安县| 萨嘎县| 星子县| 永泰县| 沙雅县| 金乡县| 霍林郭勒市| 大洼县| 广宁县| 衡阳市| 武邑县| 沧源| 东宁县| 华阴市| 开平市| 成武县| 大新县| 濉溪县| 襄城县| 崇左市| 西贡区| 卢湾区| 古交市| 神农架林区| 深州市| 东乌| 大名县| 镶黄旗| 黄骅市| 拉孜县| 曲阜市| 城固县|