WCF開發(fā)實戰(zhàn)教程.docx_第1頁
WCF開發(fā)實戰(zhàn)教程.docx_第2頁
WCF開發(fā)實戰(zhàn)教程.docx_第3頁
WCF開發(fā)實戰(zhàn)教程.docx_第4頁
WCF開發(fā)實戰(zhàn)教程.docx_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

WCF開發(fā)實戰(zhàn)系列教程1:創(chuàng)建第一個WCF服務(wù)在這個實戰(zhàn)中我們將使用DataContract,ServiceContract來構(gòu)建WCF服務(wù),并使用VS2008內(nèi)置的“WCFSVCHost”運(yùn)行我們創(chuàng)建的WCF服務(wù),并使用“WCF測試客戶端”來測試我們創(chuàng)建的服務(wù)。在此WCF服務(wù)中我們將建立一個關(guān)于Book的服務(wù),并實現(xiàn)對Book的添加、刪除和檢索操作。第一步:創(chuàng)建“WCF服務(wù)庫”“文件(F)”-“新建項目(P).”打開新建項目對話框。在左側(cè)的“項目類型”中選擇“WCF”,然后再在右側(cè)的“模板”中選擇“WCF服務(wù)庫”。在下面的“名稱”文本框中,填寫我們要創(chuàng)建的WCF服務(wù)庫的項目名稱“Services”。圖1點(diǎn)擊確定,會創(chuàng)建出我們的WCF服務(wù)庫項目,在解決方案中會自動為我們生成兩個類文件“IService.cs”和“Service.cs”。圖2這兩個類文件是兩個WCF示例文件,對我們開發(fā)沒有什么用處,現(xiàn)在我們刪掉這兩個文件。第二步:創(chuàng)建Book實體類在“解決方案窗口”中,我們右擊Services項目名,選擇“添加”,再單擊“類”圖3在彈出的“添加新項”窗口中,選擇“類”,并在“名稱”文本框中寫入項名稱“Book.cs”。圖4第三步:為Book實體類編寫代碼using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;namespace ServicesDataContract public classBook DataMember public stringBookNO;DataMember public stringBookName;DataMember public decimalBookPrice; 為了保證此類在WCF調(diào)用中能夠被序列化,我們在Book類上面加入DataContract標(biāo)簽,在每個需要序列化的成員變量上加入DataMember標(biāo)簽。這兩個標(biāo)簽在使用的進(jìn)候需要導(dǎo)入using System.Runtime.Serialization命名空間。到此為至,我們創(chuàng)建完了需要在服務(wù)中傳輸?shù)膹?fù)雜的數(shù)據(jù)類型Book。第四步:創(chuàng)建服務(wù)接口創(chuàng)建服務(wù)接口,聲明對外發(fā)布的類和方法。在“解決方案窗口”中,我們右擊Services項目名,選擇“添加”,再單擊“類”圖3在彈出的“添加新項”窗口中,選擇“類”,并在“名稱”文本框中寫入項名稱“IBookService.cs”。圖5在此類文件中我們編寫服務(wù)接口,代碼如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;namespace ServicesServiceContract public interfaceIBookService OperationContract voidAddBooks(Book book);OperationContractList GetAllBooks();OperationContract voidRemoveBook(string id); 在IBookService接口上面,我們定義了ServiceContract標(biāo)簽,此標(biāo)簽代表此接口及實現(xiàn)此接口的類都是對外發(fā)布的Service類,在每個需要對外發(fā)布的方法上都加上OperationContract標(biāo)簽,以使外部可以訪問到此方法。ServiceContract和OperationContract這兩個標(biāo)簽需要導(dǎo)入using System.ServiceModel命名空間。第五步:創(chuàng)建實現(xiàn)服務(wù)接口的類實現(xiàn)我們上面聲明的服務(wù)接口,實現(xiàn)對Book的添加、刪除和檢索的具體功能。在“解決方案窗口”中,我們右擊Services項目名,選擇“添加”,再單擊“類”圖3在彈出的“添加新項”窗口中,選擇“類”,并在“名稱”文本框中寫入項名稱“BookService.cs”。圖6在此類文件中編寫代碼實現(xiàn)IBookService.cs服務(wù)接口。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.ServiceModel;namespace ServicesServiceBehavior(InstanceContextMode=InstanceContextMode.Single) public classBookService : IBookService List _Books = new List(); public voidAddBooks(Book book) book.BookNO = Guid.NewGuid().ToString(); _Books.Add(book); public ListGetAllBooks() return _Books; public voidRemoveBook(string id) Book book = _Books.Find(p = p.BookNO = id); _Books.Remove(book); 此類是對IBookService接口的具體實現(xiàn),在此類的上面我們聲明了ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)標(biāo)簽,此標(biāo)簽代表這個類采用SingleTone(單類模式)來生成對象。使用ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)接口需要導(dǎo)入using System.ServiceModel;命名空間。第六步:配置WCF服務(wù)到目前為至,我們建立好了WCF服務(wù),那我們?nèi)绾巫學(xué)CFSVCHost(WCF服務(wù)主機(jī))理解我們編寫的服務(wù)類,并能夠運(yùn)行我們編寫的服務(wù)呢。這需要我們在App.Config里面注冊一下我們的WCF服務(wù)。代碼如下: 這么多東西誰能記得下?!沒關(guān)系,VS2008為我們提供了可視化的操作界面。在Services項目中右擊“App.Config”配置文件,在彈出的右鍵菜單中選擇“編輯WCF配置”。圖7彈出界面如下:圖8在此界面中暴露兩個對外的終結(jié)點(diǎn)(外部可以訪問到的類或接口),其中下面一個是元數(shù)據(jù)終結(jié)點(diǎn),用來向外提供服務(wù)信息的終結(jié)點(diǎn)。而另一個(即上面的終結(jié)點(diǎn)),是向外公布我們編寫的ServiceContract的類,但我們可以看到它的Contract還是我們在第一步中刪掉的Services.IService1這個終結(jié)點(diǎn)。不僅如此,在右側(cè)的服務(wù)中還依舊是我們在第一步中刪除的Services.Service1服務(wù)。這說明雖然在第一步中我們刪除了那兩個自動生成的類文件,但配置文件中仍沒有刪除這兩個類文件的配置信息。下面我們把它們改變一下。單擊左側(cè)的“服務(wù)”-“Services.Service1”在右側(cè)的Name,彈出“服務(wù)類型瀏覽器”對話框,在此類型中我們找到此WCF服務(wù)項目編譯出來的Services.dll文件,雙擊它就可以出現(xiàn)此服務(wù)中的對外公布的服務(wù),點(diǎn)擊選中它單擊確定。圖9這樣我們就可以把對外公司的服務(wù)改變?yōu)槲覀儎偩帉懙姆?wù)了。然后,我們展開左側(cè)“服務(wù)”-“Services.BookService”-“終結(jié)點(diǎn)”,單擊第一個“空名稱”,從右邊的“終結(jié)點(diǎn)屬性”中的Contract中我們可以看到,這里的Contract仍然用的是Services.IService1。圖10那我們按照上面的做法,找到此WCF服務(wù)項目編譯出來的Services.dll,雙擊它找到里面對應(yīng)的ServiceContract點(diǎn)擊確定就可以了。圖11點(diǎn)擊菜單“文件”-“保存”就可以把我們對App.Config的修改保存回配置文件了。OK,現(xiàn)在我們對WCF的配置算是完成了第七步:運(yùn)行WCF進(jìn)行測試。 在VS2008中為我們提供了測試WCF的工具,按F5啟動WCF會出現(xiàn)兩個東西 一個是在右下角的托盤圖標(biāo)中會出現(xiàn)WCFSVCHost(WCF服務(wù)主機(jī)),它為我們在開發(fā)時候提供了一個運(yùn)行WCF的服務(wù)器,用來為測試客戶端提供WCF服務(wù)。 圖12 另一個是“WCF測試客戶端” 圖13 “測試客戶端”從WcfSVCHost中取得WCF服務(wù)的元數(shù)據(jù),解析為右側(cè)的“服務(wù)結(jié)構(gòu)樹”,從這里面我們可以看到此WCF服務(wù)為我們提供了一個服務(wù)契約“IBookService”,此服務(wù)契約中對外提供了三個可調(diào)用的方法。 雙擊AddBooks()方法,我們可以從右面輸入相關(guān)的數(shù)據(jù)然后點(diǎn)擊“調(diào)用”,就可以把數(shù)據(jù)送給WCF服務(wù)器,去調(diào)用對應(yīng)的方法了。 圖14 雙擊GetAllBooks方法,我們可以查看添加的書的信息 圖15 雙擊RemoveBoo()方法就可以把書刪除 圖162: 使用IIS發(fā)布WCF服務(wù)上一篇中,我們創(chuàng)建了一個簡單的WCF服務(wù),在測試的時候,我們使用VS2008自帶的WCFSVCHost(WCF服務(wù)主機(jī))發(fā)布WCF服務(wù),以便進(jìn)行測試。這種VS2008內(nèi)置的WCFSVCHost只適用于開發(fā)人員測試的使用,能進(jìn)行WCF服務(wù)部署。這一篇文章中我們來看一下如何在IIS中部發(fā)布我們上一篇中做好的WCF服務(wù)。第一步:打開我們上一篇文章中建立的WCF服務(wù)項目。圖1第二步:新建WCF服務(wù)站點(diǎn)。在解決方案上右擊,選擇“添加”-“新建網(wǎng)站”,打開新建網(wǎng)站對話框。在“添加新網(wǎng)站”對話框中,我們選擇“WCF服務(wù)”,并把網(wǎng)站的名子命名為“BookServiceHost”圖2建立起來的新的WCF服務(wù)站點(diǎn)的結(jié)果如下,其中在App_Code文件中自動為我們生成兩個類文件:IService.cs和Service.cs。這兩個文件對我們來說沒有用,我們刪掉。圖3第三步:在剛剛創(chuàng)建的WCF服務(wù)站點(diǎn)上添加對WCF服務(wù)庫項目-Services項目的引用。圖4第四步:配置Service.svc文件。雙擊Service.svc文件,我們可以看到它的聲明指示如下:由于在第二步中我們已經(jīng)把IService.cs和Service.cs兩個文件已經(jīng)刪除了,所以這里的聲明指示內(nèi)容修改一下,讓這個Service.svc文件的后臺代碼指向我們上次創(chuàng)建的WCF服務(wù)庫項目-Services項目中的類,改后的代碼如下:我們把其中的Service屬性指定為Services命名空間下的BookService類,并把CodeBehind屬性刪去了。第五步:配置此WCF服務(wù)站點(diǎn)與WCF服務(wù)庫項目之間的類的對應(yīng)。雖然在第三步中我們添加了對Services項目的引用,并且在第四步中修改了Service.svc的類的對應(yīng),但此時我們的WCF服務(wù)站點(diǎn)并不能把WCF服務(wù)庫中的服務(wù)和終結(jié)點(diǎn)發(fā)布出來,還需要我們對web.config進(jìn)行一系列的配置工作。在web.config上右擊選擇“編輯WCF配置”圖5在彈出的服務(wù)配置窗口中,把Service服務(wù)指定到WCF服務(wù)庫的Services.dll中的Services.BookService服務(wù)類上。圖6再把其中的一個對外終結(jié)點(diǎn)的Contract設(shè)為WCF服務(wù)庫的Services.dll中的Services.IBookService服務(wù)契約上。圖7第六步:試著再添加一個通信的終結(jié)點(diǎn)。這一步是可選的,我們再為此WCF服務(wù)站點(diǎn)添加一個終結(jié)點(diǎn),A=basic B=basicHttpBindingC=Services.IBookService圖8下面我們將試著使用不同的終結(jié)點(diǎn)與WCF服務(wù)進(jìn)行交互,查看運(yùn)行情況。當(dāng)我們使用IIS5或IIS6發(fā)布WCF服務(wù)的時候一般只創(chuàng)建Http綁定的終結(jié)點(diǎn),而不能創(chuàng)建使用TCP綁定、管道綁定的終結(jié)點(diǎn)。第七步:測試運(yùn)行WCF服務(wù)站點(diǎn)。在Service.svc上右擊,選擇“在瀏覽器中查看”,在IE中運(yùn)行此服務(wù)。圖9由此我們看到我們可以在ASP.NET Development Server中發(fā)布我們的WCF服務(wù)了。第八步:在IIS布署此WCF服務(wù)站點(diǎn)。在IIS建立Web應(yīng)用程,指向我們的WCF服務(wù)站點(diǎn)所在的目錄。然后在IIS運(yùn)行我們發(fā)布的WCF服務(wù)圖10從上圖中我們看到發(fā)布的站點(diǎn)中不再包含有端口號。到此為至我們在IIS中發(fā)布WCF服務(wù)成功。下面我們在WCF測試客戶端調(diào)用我們剛剛在IIS中發(fā)布的WCF服務(wù)第九點(diǎn):在VS2008命令窗口中輸入以下代碼運(yùn)行WCF測試客戶端x:.wcftestclienthttp:/localhost/TestWCFService/Service.svc彈出測試窗口如下:圖11我們可以看到發(fā)布的服務(wù)中有兩個終結(jié)點(diǎn):這兩個終結(jié)點(diǎn)的傳輸方式不同,但提供的方法是相同的。我們通過第一個終結(jié)點(diǎn)的AddBooks()方法添加三個對象。圖12再通過第二個終結(jié)點(diǎn)的GetAllBooks()方法取得所有對象的信息。圖13運(yùn)行完全沒問題。3:自運(yùn)行WCF服務(wù)上一篇文章中我們建立了一個WCF服務(wù)站點(diǎn),為WCF服務(wù)庫運(yùn)行提供WEB支持,我們把這個WCF服務(wù)站點(diǎn)布署到IIS中去,實現(xiàn)WCF服務(wù)在Web上的發(fā)布。這一篇文章中我們來談一下“自運(yùn)行WCF服務(wù)”。什么是“自運(yùn)行WCF服務(wù)”呢?就是通過我們編寫的控制臺程序或WinForm程序來為本機(jī)或遠(yuǎn)程機(jī)提供WCF服務(wù)的方式。下面我們使用控制臺程序來提供WCF的自運(yùn)行服務(wù)第一步:建立控制臺應(yīng)用程序ConsoleBookServiceHost圖1第二步:向ConsoleBookServiceHost程序中添加兩個引用:一個是WCF服務(wù)庫Services項目的引用,另一個是System.ServiceModel引用。第三步:在ConsoleBookServiceHost 項目中的Program.cs中編寫代碼。using System;using System.Collections.Generic;using System.Linq;using System.Text;using Services; /導(dǎo)入WCF服務(wù)庫項目命名空間using System.ServiceModel;/導(dǎo)入WCF服務(wù)命名空間namespace ConsoleBookServiceHost public class Program public static void Main(string args) /實例化ServiceHost服務(wù)承載器,并在構(gòu)造函數(shù)中指定要發(fā)布的BookServiceServiceHost host = new ServiceHost(typeof(BookService); /打開服務(wù)承載器,讀取配置文件中的WCF服務(wù)的配置信息host.Open(); Console.WriteLine(服務(wù)已啟動.); Console.ReadLine();host.Close(); 第四步:在ConsoleBookServiceHost中添加配置文件App.Config。圖2第五步:在App.Config上右擊選擇選擇“編輯WCF配置”,彈出服務(wù)配置管理窗口圖3由于該App.Config文件是我們新添加的一個配置文件,所以左邊的服務(wù)項中是空的。第六步:點(diǎn)擊右邊的“新建服務(wù).”彈出“新建服務(wù)元素向?qū)А贝翱?,單擊“瀏覽”按鈕,選擇Bin/Debug目錄下Services.dll程序集中的Services.BookService服務(wù)。圖4第七步:單擊“下一步”,是“選擇服務(wù)契約”項,單擊“瀏覽”按鈕,選擇Bin/Debug目錄下Services.dll程序集中的Services.IBookService服務(wù)契約。圖5第八步:單擊“下一步”,是“選擇通信模式”的界面。在這里我們先選擇Http圖6第九步:單擊“下一步”,是選擇Http通信的“互操作方式”。界面中有兩項供我們選擇:基本W(wǎng)eb互操作性和高級web互操作性。在這里我們選擇第一項圖7第十步:單擊“下一步”,是“選擇終結(jié)點(diǎn)地址”,也就告訴程序訪問這個終結(jié)點(diǎn)的路徑地址。這里的地址可以使用http:/.格式的絕對地址,也可以像圖中那樣使用相對地址。圖8第十一步:單擊“下一步”,出來配置成功界面,單擊“完成”完成此次配置圖9此時WCF配置窗口中會出現(xiàn)一個服務(wù)節(jié)點(diǎn),其中的終結(jié)點(diǎn)就是我們剛才配置信息A=basic B=basicHttpBinding C=Service.IBookService圖10第十二步:下面我們再使用向?qū)砑右粋€終結(jié)點(diǎn)點(diǎn)擊左側(cè)的“服務(wù)”節(jié)點(diǎn),出現(xiàn)界面如下:圖11點(diǎn)擊“新建服務(wù)終結(jié)點(diǎn).”處彈出向?qū)?,選擇服務(wù)契約圖5點(diǎn)擊“下一步”出現(xiàn)界面“選擇通信模式”,這里我們還是選擇Http圖6點(diǎn)擊“下一步”出現(xiàn)界面“互操作方式”,這里我們選擇“高級web互操作性”,這種互操作方式的安全性比較高圖12點(diǎn)擊“下一步”出現(xiàn)界面“選擇終結(jié)點(diǎn)地址”,這里我們使用相對地址,填寫 ws圖13點(diǎn)擊“下一步”出現(xiàn)配置成功界面,單擊“完成”完成此次配置圖14此時WCF配置窗口中又會多出一個服務(wù)節(jié)點(diǎn),其中的終結(jié)點(diǎn)就是我們剛才配置信息A=ws B=ws2007HttpBinding C=Service.IBookService圖15到目前為止我們配置好了兩個http通道下的兩個終結(jié)點(diǎn),但這兩個終結(jié)點(diǎn)的地址我們都使用的是相對地址,它們是相對于當(dāng)前ServiceHost地址,所以我們還需要配置當(dāng)前ServiceHost的地址.第十三步:配置ServiceHost的地址:點(diǎn)擊左側(cè)“配置”中的“主機(jī)”,在右邊點(diǎn)擊“新建”按鈕,在彈出的窗口中寫入ServiceHost的地址,在這里可以選擇使用端口號。圖16這樣我們兩個終結(jié)點(diǎn)算是配置完成了?!白赃\(yùn)行WCF服務(wù)”與上一篇說的“在IIS布運(yùn)行WCF服務(wù)”不一樣的是,“自運(yùn)行WCF服務(wù)除了可以使用Http方式發(fā)布WCF服務(wù),可以使用TCP、命名管道和微軟消息隊列進(jìn)行信息傳輸。下面我們再配置兩個終結(jié)點(diǎn),一個是使用TCP通信模式,另一個使用命名管道通信模式。第十四步:添加一個新的TCP終結(jié)點(diǎn),配置如下:圖17第十五步:添加一個新的命名管道終結(jié)點(diǎn),配置如下:圖18到此為至,我們已經(jīng)為該WCF服務(wù)建立了四個數(shù)據(jù)傳輸?shù)慕K結(jié)點(diǎn):圖19下面我們?yōu)樵揝erviceHost程序配置“元數(shù)據(jù)終結(jié)點(diǎn)”,以向客戶端發(fā)送服務(wù)元數(shù)據(jù)信息第十六步:添加服務(wù)行為。在左側(cè)配置中選擇“高級”-“服務(wù)行為”,再點(diǎn)擊右側(cè)的“新建服務(wù)行為分配”圖20圖21在上圖中,點(diǎn)擊“添加”彈出“添加行為元素擴(kuò)展部份”窗口,選擇“serviceMetaData”圖22第十七步:為服務(wù)配置剛剛新建的行為。圖23第十八步:配置元數(shù)據(jù)終結(jié)點(diǎn):圖24圖25圖26圖27圖28圖29此時我們運(yùn)行的時候,會出現(xiàn)錯誤如下(無法加載配置中的x.509證書標(biāo)識):圖30我們看一下App.config配置文件中的代碼如下: 把其中的 都刪掉。按Ctrl+F5運(yùn)行即可。至此,我們把用來提供 WCF服務(wù)的運(yùn)行程序編寫完成了。測試一下。選按Ctrl+F5運(yùn)行我們上面編寫的ServerHost程序打開瀏覽器,在地址欄中輸入第十三步中ServerHost中的地址,出現(xiàn)如下界面:圖31從圖中我們可以看出,這個Service頁面就是通過我們上面的ServiceHost程序來提供的WCF服務(wù)下面我們再通過wcftestclient來測試一下選按Ctrl+F5運(yùn)行我們上面編寫的ServerHost程序再打開VS2008的DOS窗口,輸入wcftestclienthttp:/localhost:8081/BookService出現(xiàn)界面如下:圖32從圖中我們可以看出,我們?yōu)锽ookService配置的四個終點(diǎn)都顯示出來了,我們可以使用不同的終結(jié)點(diǎn)添加書目信息,然后再用其它的終結(jié)點(diǎn)取出書目信息。因為這四個不同通道的終結(jié)點(diǎn)都是操作同一個服務(wù)。4:使用Windows服務(wù)發(fā)布WCF服務(wù)上一篇文章中我們通過編寫的控制臺程序或WinForm程序來為本機(jī)或遠(yuǎn)程機(jī)提供WCF服務(wù)的方式,我們稱這種方式為Self-Host服務(wù)發(fā)布方式,這一篇文章我們來看一下如何編寫Windows服務(wù)來發(fā)布WCF服務(wù)。第一步:建立Windows服務(wù)程序WindowsServiceHost圖1圖2第二步:向ConsoleBookServiceHost程序中添加兩個引用:一個是WCF服務(wù)庫Services項目的引用,另一個是System.ServiceModel引用。第三步:修改Service1的屬性在Service1的設(shè)計界面中右擊,選擇“屬性”,把其中的(Name)和ServiceName都改為BookServiceHost圖3第四步:在Service1中編寫代碼如下圖4第五步:配置App.Config。在這里我們不再詳細(xì)說明如何配置了,我們直接把上一次SelfHostBookService項目中的App.Config復(fù)制過來卻可圖5到這里我們已經(jīng)作好一個可以發(fā)布BookService服務(wù)的Windows Service宿主程序了。下面我們要看一看如何把這個Windows Service運(yùn)行起來。第六步:為服務(wù)添加安裝程序。在Service1設(shè)計界面中右擊,選擇“添加安裝程序”圖6生成安裝程序組件,出現(xiàn)界面如下圖7serviceProcessInstaller1:服務(wù)安裝的信息圖8serviceInstaller1:服務(wù)本身的信息圖9編譯成功第七步:安裝上面編寫完的服務(wù)打開VS2008命令窗口,進(jìn)入當(dāng)前項目的bin/Debug文件夾中,執(zhí)行命令 :installutil WindowsServiceHost.exe圖10圖11第八步:啟動BookServiceHost服務(wù)打開服務(wù)管理器,我們可以看到我們剛剛注冊上的服務(wù)已經(jīng)存在了,但還沒有啟動,右擊“啟動”圖12第九步:測試服務(wù):打開IE,在地址欄中輸入:http:/localhost:8081/BookService出現(xiàn)下面的界面圖13在VS2008命令窗口中輸入:wcftestclienthttp:/localhost:8081/BookService出現(xiàn)下面的界面圖14調(diào)用相應(yīng)終結(jié)點(diǎn)的方法添加書籍,運(yùn)行正常。5:創(chuàng)建WCF客戶端程序在前面的三篇文章中我們分別介紹了WCF服務(wù)的三種載體:IIS、Self-Host、Windows Service Host。當(dāng)WCF編寫完成后我們一般要通過這三種方式的一種發(fā)布WCF服務(wù),當(dāng)WCF服務(wù)發(fā)布后,我們就可以編寫客戶程序來與服務(wù)的終結(jié)點(diǎn)進(jìn)行通信。這篇文章我們主要來介紹如何編寫客戶程序。前提:1.事先建立好一個WCF服務(wù)2.使用上面任何一種方式發(fā)布WCF。在這里我們使用上篇文章中介紹的WindowsServiceHost發(fā)布BookService程序。圖1圖2第一步:新建一個項目此項目可以是控制臺程序、WinForm、ASP.NET中的任何一個,甚至還可以是其它語言的應(yīng)用程序,如:JavaEE等。在這里我使用控制臺程序為例,建立一個客戶項目Client。圖3第二步:為此項目添加Web引用。右擊項目名稱,選擇“添加服務(wù)引用.”圖4在彈出的“添加服務(wù)引用”的對話框中,在地址欄里我們輸入前面我們發(fā)布的WCF服務(wù)的終結(jié)點(diǎn)的地址http:/localhost:8081/BookService點(diǎn)擊“前往”后,會到上面的地址中去下載WCF服務(wù)的元數(shù)據(jù),根據(jù)接收到的元數(shù)據(jù)信息,在“服務(wù)”列表中顯示出該地址中相應(yīng)的服務(wù)(BookService),展開BookService會看到該服務(wù)的服務(wù)契約(IBookService),點(diǎn)擊IBookService,我們會看到該服務(wù)契約中包含的方法契約。在“命名空間”文本框中為該服務(wù)引用指定命名空間,此處為WS圖5點(diǎn)擊完成,在“解決方案管理器”中我們可以看到添加完服務(wù)引用后的項目。它會自動為我們添加System.ServiceModel、System.Runtime.Serialization兩個本地引用和一個WS服務(wù)引用。圖6雙擊打開App.Config會發(fā)現(xiàn)里面的內(nèi)容都自動配置好了,圖7右擊服務(wù)引用WS,選擇“在對象瀏覽器中查看”,會在對象瀏覽器中顯示出該服務(wù)引用的元數(shù)據(jù)結(jié)構(gòu)。圖8圖9到目前為至,我們把WCF服務(wù)引用添加到了我們Client程序中了。第三步:編寫客戶端程序代碼訪問WCF服務(wù)實例化BookServiceClient,它是我們訪問WCF服務(wù)的代理類。在BookServiceClient實例化時,需要在此類的構(gòu)造函數(shù)中指定訪問WCF服務(wù)的終結(jié)點(diǎn)的名稱。我們打開App.Config,在想要與客戶端進(jìn)行通訊的元素中找到其“name”屬性,并把該屬性的值復(fù)制并粘貼到BookServiceClient的構(gòu)造函數(shù)中。WS.BookServiceClient client = new Client.WS.BookServiceClient(NetNamedPipeBinding_IBookService);使用client對象與WCF服務(wù)通信,添加兩本書。WS.Book book1 = new Client.WS.Book();book1.BookName = 贏在中國;book1.BookPrice = 28.8M;client.AddBooks(book1);WS.Book book2 = new Client.WS.Book();book2.BookName = 東周列國傳;book2.BookPrice = 52.0M;client.AddBooks(book2);使用client對象與WCF服務(wù)通信,查詢現(xiàn)有的書籍列表。foreach (WS.Book book in client.GetAllBooks() Console.WriteLine(book.BookName+t+book.BookPrice);運(yùn)行結(jié)果:圖10如果由于網(wǎng)絡(luò)比較慢,或WCF服務(wù)器壓力比較大時,當(dāng)我們Client向他們發(fā)出請求時并不會及時得到響應(yīng),會出現(xiàn)一段時間的延遲。如果Client是控制臺程序就會出現(xiàn)“卡”的效果,如果Client是WinForm窗體的話,會出現(xiàn)按鈕點(diǎn)下去彈不起來的“假死”情況,這是因為我們是同步訪問WCF服務(wù)。一般我們訪問遠(yuǎn)程服務(wù)的時候很少使用這種同步訪問,因為訪問遠(yuǎn)程服務(wù)有好多不確定性,如果使用同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論