通過IIS方式寄宿服務 之前的例子是將控制台作為WCF的寄宿方式或者是直接添加契約項目的引用,然後通過配置或者是ChannelFactory的形式進行創建服務對象,其實在大多的開發中以IIS的形式創建WCF也是比較常見的。每一個Webservice都是具有一個asmx文本文件,客戶端通過訪問.asm ...
通過IIS方式寄宿服務
之前的例子是將控制台作為WCF的寄宿方式或者是直接添加契約項目的引用,然後通過配置或者是ChannelFactory的形式進行創建服務對象,其實在大多的開發中以IIS的形式創建WCF也是比較常見的。
每一個Webservice都是具有一個asmx文本文件,客戶端通過訪問.asmx文件即可實現Webservice的調用。當然WCF和Webservice類似,每一個WCF服務都有一個對應的.svc文本文件。基於IIS服務寄宿要求的WCF服務都具有相應的.svc文件,.svc文件部署於IIS站點中,對WCF服務的調用提現在對.svc文件的訪問上。.svc文件僅僅包含一個%@ ServiceHost這樣的指令,該指令具有一個必須的Service屬性和一些可選的屬性,如下代碼所示就是一個簡單的.svc文本的內容
其中指定了Service屬性為一個完整名稱的WCF服務類。
寄宿在IIS下的WCF服務實際上就是一個WEB應用,所以通常會把.svc文件放在Web下,並且通過web.config文件進行配置WCF的終結點和用於發佈元數據的ServiceMetadataBehavior服務行為。由於服務調用是通過訪問服務對應的.svc文件來實現的,這個.svc文件所在的地址對於客戶端來說就是服務(終結點)的地址,因此是不需要配置終結點的adder的,配置代碼如下:
除了終結點沒有指定address之外,服務行為ServiceMetadataBehavior用於元數據發佈時也沒有指定元素的發佈地址。在這種情況下,.svc文件的地址加上?wsdl查詢字元串就是元數據發佈地址。對於當前例子來說,當服務被成功寄宿到本地的Web應用之後,就可以通過http://127.0.0.1:1111/網站名稱/CalculatorService.svc?wdsl得到表示服務元數據的WSDL文件,這也就是為什麼我們右鍵瀏覽.svc文件的時候返回的是很長的xml內容。
再次修改客戶端:
僅僅修改了address屬性,當前假設我們的Web應用程式叫做MyWeb,這也我們的address就可以找到發佈後的.svc文件了。
至此,我們一共介紹了兩大類的WCF的方法:
一種是將WCF服務寄宿在控制台程式:
1.通過添加服務引用(根據元數據的地址添加),然後創建了一個Client對象,然後就可以操作了;
2.通過添加對契約項目的引用,然後通過ChannelFactory創建了一個Channel對象(通過契約類型,Binding,以及一個地址);
3.通過添加對契約項目的引用,然後通過ChannelFactory創建了一個Channel對象(首先會在config中配置endpoint信息,然後通過endpoint的name作為 ChannelFactory的參數進行創建)。
一種是依靠IIS作為寄宿:
1.添加對契約項目的引用,然後通過修改配置文件的endpoint的address為.svc的地址,這樣同樣還是通過ChannelFactory方式進行創建代理對象;
2.添加契約項目的引用,然後通過ChannelFactory創建了一個Channel對象(通過契約類型,Binding,以及一個地址,這時候的地址應該是.svc)。