淺析使用WCF宿主
之前我們就自宿主做了詳解,現(xiàn)在我們就宿主和大家分析一下,大家可能認(rèn)為這不是一回事嗎?其實(shí)不然,我們這里就來看看吧。每個(gè)WCF服務(wù)必須宿主在一個(gè)Windows進(jìn)程中(稱為宿主進(jìn)程)。單個(gè)宿主進(jìn)程可以宿主多個(gè)服務(wù),而相同的服務(wù)類型可以宿主在多個(gè)進(jìn)程中。WCF宿主并不要求是否該宿主進(jìn)程也是客戶端進(jìn)程。
顯然,應(yīng)該有一個(gè)獨(dú)立的進(jìn)程支持錯(cuò)誤和安全的隔離。另外,誰提供進(jìn)程或調(diào)用哪種類型的進(jìn)程都不是實(shí)質(zhì)性的問題。這個(gè)WCF宿主可以由IIS或Windows Vista中的Widows活動(dòng)服務(wù)(WAS)或由開發(fā)者作為應(yīng)用程序的一部分來提供。
IIS宿主
#T#在IIS中宿主一個(gè)服務(wù)的主要優(yōu)點(diǎn)是,在發(fā)生客戶端請(qǐng)求時(shí)宿主進(jìn)程會(huì)被自動(dòng)啟動(dòng),并且你可以依靠IIS來管理宿主進(jìn)程的生命周期。IIS宿主的主要不利在于,你僅僅可以在IIS5和IIS6上使用HTTP傳輸數(shù)據(jù);而且當(dāng)使用IIS5時(shí),你僅可以使用80端口。在IIS上宿主非常類似于WCF宿主一個(gè)典型的 ASMX Web服務(wù)。你需要在IIS下創(chuàng)建一個(gè)虛擬的目錄并且提供一個(gè).svc文件。這個(gè).svc文件的功能就象一個(gè)被用來標(biāo)識(shí)服務(wù)的code-behind文件和類的.asmx文件一樣。
- <%@ ServiceHost
- Language = "C#"
- Debug = "true"
- CodeBehind = "~/App_Code/MyService.cs"
- Service = "MyService"
- %>
你甚至可以把服務(wù)代碼以內(nèi)聯(lián)方式注入到.svc文件中,但是不建議這樣用(就象對(duì)于ASMX的情形一樣)。一旦你準(zhǔn)備好了.svc文件,你就可以使用一個(gè)瀏覽器來觀看它。如果一切順利,那么你將得到一個(gè)確認(rèn)頁面。
Visual Studio 2005能夠?yàn)槟闵梢粋€(gè)新的IIS宿主的服務(wù)。這只要從File菜單下選擇"New Website",然后從"New Web Site"對(duì)話框中選擇WinFX服務(wù)。這使得Visual Studio 2005創(chuàng)建一個(gè)新的Web站點(diǎn),服務(wù)代碼和匹配的.svc文件。另外,Web站點(diǎn)配置文件必須列舉出你想要暴露的服務(wù)類型。你需要使用完全限定類型名(包括程序集名),如果類型來自于一個(gè)未引用的程序集的話。
- <system.serviceModel>
- <services>
- <service name="MyNamespace.MyService">
- ...
- </service>
- </services>
- </system.serviceModel>