WCF開發實戰系列二:使用IIS發佈WCF服務

上一篇中,我們創建了一個簡單的WCF服務,在測試的時候,我們使用VS2008自帶的WCFSVCHost(WCF服務主機)發佈WCF服務,以便進行測試。這種VS2008內置的WCFSVCHost只適用於開發人員測試的使用,能進行WCF服務部署。這一篇文章中我們來看一下如何在IIS中部發布我們上一篇中做好的WCF服務。

第一步:打開我們上一篇文章中建立的WCF服務項目。

clip_image002
圖《1》

第二步:新建WCF服務站點。在解決方案上右擊,選擇“添加”->“新建網站”,打開新建網站對話框。在“添加新網站”對話框中,我們選擇“WCF服務”,並把網站的名子命名爲“BookServiceHost”

clip_image004
圖《2》
建立起來的新的WCF服務站點的結果如下,其中在App_Code文件中自動爲我們生成兩個類文件:IService.cs和Service.cs。這兩個文件對我們來說沒有用,我們刪掉。

clip_image006
圖《3》

第三步:在剛剛創建的WCF服務站點上添加對WCF服務庫項目--Services項目的引用。

clip_image008
圖《4》

第四步:配置Service.svc文件。
雙擊Service.svc文件,我們可以看到它的聲明指示如下:
<%@ ServiceHost Language="C#" Debug="true" Service="Service" CodeBehind="~/App_Code/Service.cs" %>
由於在第二步中我們已經把IService.cs和Service.cs兩個文件已經刪除了,所以這裏的聲明指示內容修改一下,讓這個Service.svc文件的後臺代碼指向我們上次創建的WCF服務庫項目--Services項目中的類,改後的代碼如下:
<%@ ServiceHost Language="C#" Debug="true" Service="Services.BookService"%>
我們把其中的Service屬性指定爲Services命名空間下的BookService類,並把CodeBehind屬性刪去了。

第五步:配置此WCF服務站點與WCF服務庫項目之間的類的對應。
雖然在第三步中我們添加了對Services項目的引用,並且在第四步中修改了Service.svc的類的對應,但此時我們的WCF服務站點並不能把WCF服務庫中的服務和終結點發布出來,還需要我們對web.config進行一系列的配置工作。
在web.config上右擊選擇“編輯WCF配置”

clip_image010
《圖5》
在彈出的服務配置窗口中,把Service服務指定到WCF服務庫的Services.dll中的Services.BookService服務類上。

clip_image011
《圖6》
再把其中的一個對外終結點的Contract設爲WCF服務庫的Services.dll中的Services.IBookService服務契約上。

clip_image012
《圖7》

第六步:試着再添加一個通信的終結點。
這一步是可選的,我們再爲此WCF服務站點添加一個終結點,A=basic B=basicHttpBinding C=Services.IBookService

clip_image013
《圖8》
下面我們將試着使用不同的終結點與WCF服務進行交互,查看運行情況。
當我們使用IIS5或IIS6發佈WCF服務的時候一般只創建Http綁定的終結點,而不能創建使用TCP綁定、管道綁定的終結點。

第七步:測試運行WCF服務站點。
在Service.svc上右擊,選擇“在瀏覽器中查看”,在IE中運行此服務。

clip_image014
《圖9》
由此我們看到我們可以在ASP.NET Development Server中發佈我們的WCF服務了。

第八步:在IIS佈署此WCF服務站點。
在IIS建立Web應用程,指向我們的WCF服務站點所在的目錄。然後在IIS運行我們發佈的WCF服務

clip_image015
《圖10》
從上圖中我們看到發佈的站點中不再包含有端口號。
到此爲至我們在IIS中發佈WCF服務成功。

下面我們在WCF測試客戶端調用我們剛剛在IIS中發佈的WCF服務
第九點:在VS2008命令窗口中輸入以下代碼運行WCF測試客戶端
x:\...\wcftestclient http://localhost/TestWCFService/Service.svc
彈出測試窗口如下:

clip_image016
《圖11》
我們可以看到發佈的服務中有兩個終結點:這兩個終結點的傳輸方式不同,但提供的方法是相同的。
我們通過第一個終結點的AddBooks()方法添加三個對象。

clip_image017
《圖12》
再通過第二個終結點的GetAllBooks()方法取得所有對象的信息。

clip_image018
《圖13》
運行完全沒問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章