IIS是WCF服務的宿主之一,在建立Web Site的時候有WCF Service模板可以供選擇,不過依據WCF Service模板建立的網站是將服務和宿主整合在一起了,下面就來看看如何將一個已有的WCF服務寄存在IIS中。
1 在一個簡單的WCF樣本一文的解決方案中添加新的網站,選擇WCF Service模板,地址設定為http://localhost/IISHostedService,如:
2 確定後,WCF Service模板就產生了一個帶有服務的網站,因為我們要將已有服務寄存在該網站中,所以要刪除網站中內建的服務,服務的檔案在App_Code目錄中,如:
3 添加對Service項目的引用,如:
4 雙擊項目中Service.svc檔案,修改@ServiceHost指令,關聯上服務類型,修改後的代碼如下:
<%@ ServiceHost Language="C#" Debug="true" Service="Service.HelloWorldService" %>
5 修改網站的Web.Config檔案,找到Service節點,修改Service節點的Name屬性、endpoint節點的綁定屬性和契約屬性,修改後的代碼如:
6 將該網站設定為啟動項目,按F5運行,如果Web.Config檔案中沒有配置中繼資料交換端點,運行後會看到如下頁面:
可以根據上面頁面中的步驟一步一步來配置中繼資料交換端點,配置好後,如果serviceMetadata節點的httpGetEnabled屬性設定為false,運行後如所示:
在設定httpGetEnabled屬性為true,再次運行可以看到svcutil指令後是一個帶有?wsdl的連結地址,如:
點擊這個連結,可以看到服務的WSDL文檔,如:
7 IIS宿主部分已經寫好,現在要做的就是使用SvcUtil工具來產生用戶端的代理,開啟VS2008 的命令提示視窗,輸入先前網站運行後的命令提示,如:
8 執行後產生了一個代理檔案和一個設定檔,在目錄C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC 中,將這兩個檔案拷貝到客戶程式中,設定檔改名為app.config,然後再客戶程式中添加如下代碼:
class Program{ static void Main(string[] args) { oec2003Client proxy = new oec2003Client(); Console.WriteLine(proxy.SayHello()); proxy.Close(); Console.ReadLine(); }}
9 運行客戶程式可以看到如下結果