上接 WCF學習之旅—WCF寄宿前的準備(八)
四、WCF服務部署到IIS7.5
我們把WCF寄宿在IIS之上,在IIS中宿主一個服務的主要優點是在發生客戶端請求時宿主進程會被自動啟動,并且你可以依靠IIS來管理宿主進程的生命周期。在開發和使用的過程與Web Service非常相似。
1) 為WCF服務創建.svc文件
對于ASP.NET Web Service的每個服務都具有一個.asmx文件,客戶端通過訪問.asmx文件實現對相應Web Service的調用。WCF服務與Web Service類似,每個WCF服務也具有一個對應的文 件,其文件擴展名為.svc。基于IIS的服務寄宿要求相應的WCF服務具有相應的.svc文件,.svc文件部署于IIS站點中,對WCF服務的調用體現在對.svc文件的訪問上。
.svc文件的內容很簡單,僅僅包含一個ServiceHost指令(Directive),該指令具有一個必須的Service屬性和一些可選的 屬性。所以最簡單的.svc僅僅具有一個包含Service屬性(該屬性指明了相應的WCF服務的有效類型)的ServiceHost指令。 BookService對應的.svc如下所示,我們把該.svc放在Services項目的根目錄下,并將文件命名為 BookService.svc。
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLib.BookService" %>
2) 為WCF創建web.config文件
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <directoryBrowse enabled="true" /> </system.webServer> <system.serviceModel> <services> <service name="WcfServiceLib.BookService"> <endpoint address="" binding="basicHttpBinding" contract="WcfServiceLib.IBookService"> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior> <!-- 為避免泄漏元數據信息, 請在部署前將以下值設置為 false --> <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" /> <!-- 要接收故障異常詳細信息以進行調試, 請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息 --> <serviceDebug includeExceptionDetailInFaults="False" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.web> <compilation defaultLanguage="c#" /> </system.web> </configuration>
3) 將上述文件和程序集放到相應目錄下
創建一個文件夾,將上述文件和程序集放到想應目錄下。這里,創建文件夾‘WCF’,將文件‘BookService.svc’,‘Web.config’放入。
因為一個Web應用在運行的時候會默認從位于根目錄下的Bin目錄加載程序集,所以,程序集‘WcfServiceLib.dll’放入子目錄‘bin'下,如下圖。
4) 為WCF服務創建WebSite
- 在IIS 7.5中,在”Default Web Site”上右鍵彈出快捷菜單,點擊“添加應用程序…”。
2. 在“添加應用程序”對話框中,分別在“別名”、“物理路徑”文本框中輸入內容,同時點擊“選擇”按鈕,在彈出的“選擇應用程序池”中選擇“ASP.NET v4.0 Classic”。
3. 創建完成之后的結果,如下圖。
4. 瀏覽BookService.svc頁面。如下圖。
5. 最后結果,如下圖。
5) 寄宿過程中的錯誤解決方法
1. HTTP 錯誤 404.3 - Not Found由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程序。如果應下載文件,請添加 MIME 映射。如下圖。
解決方案:
方法如下:控制面板—>所有面板項—>程序和功能—>打開或關閉Windows功能—>
2. 未能從程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加載類型 “System.ServiceModel.Activation.HttpModule”。
說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息:
System.TypeLoadException:
未能從程序集“System.ServiceModel,
Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加載類型
“System.ServiceModel.Activation.HttpModule”。
如下圖。
解決方案:
在CMD命令窗口中執行以下指令。 aspnet_regiis.exe -i。如下圖。
3. 它在 ServiceHost 指令中提供為 Service 特性值,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供。
解決方案:
打開.svc文件,你會看到<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLib.BookService" %> 注意紅色字體要與WCF提供的類一致。
文章列表