部署承载于 Internet 信息服务中的 WCF 服务
開發和部署承載于 Internet 信息服務 (IIS) 中的 Windows Communication Foundation (WCF) 服務包括以下任務:
- 確保已正確安裝和注冊 IIS、WCF 和 WCF 激活組件。
- 創建新的 IIS 應用程序,或重新使用現有的 ASP.NET 應用程序。
- 為 WCF 服務創建 .svc 文件。
- 將服務實現部署到 IIS 應用程序。
- 配置 WCF 服務。
有關創建承載于 IIS 中的 WCF 服務的詳細演練,請參見如何:在 IIS 中承載 WCF 服務。
確保已正確安裝和注冊 IIS 和 WCF
必須同時安裝 WCF 和 IIS,承載于 IIS 中的 WCF 服務才能正常工作。安裝 WCF(作為 .NET Framework 3.0 的一部分)和 IIS 的過程隨所用操作系統版本的不同而不同。有關 安裝 WCF 和 .NET Framework 3.0 的更多信息,請參見 Microsoft .NET Framework 3.0 可再發行組件包(可能為英文網頁)。有關安裝 IIS 的說明可以在安裝 IIS(可能為英文網頁)上找到。
如果計算機上已存在 IIS,則在安裝 .NET Framework 3.0 的過程中自動向 IIS 注冊 WCF。如果在安裝 .NET Framework 3.0 后安裝 IIS,則需要執行其他步驟向 IIS 和 ASP.NET 注冊 WCF。根據您的操作系統,可以按如下所述執行此操作:
- Windows XP SP2 和 Windows Server 2003:使用 ServiceModelReg.exe 工具向 IIS 注冊 WCF:若要使用此工具,請在命令提示符下鍵入 ServiceModelReg.exe /i /x。
- Windows Vista:安裝 .NET Framework 3.0 的 Windows Communication Foundation Activation Components 子組件。為此,請在控制面板中,單擊“添加或刪除程序”,然后單擊“添加/刪除 Windows 組件”。這將激活“Windows 組件向導”。
創建新的 IIS 應用程序或重新使用現有的 ASP.NET 應用程序
承載于 IIS 中的 WCF 服務必須駐留在 IIS 應用程序內??梢詣摻ㄒ粋€新的 IIS 應用程序專門承載 WCF 服務。或者,可以將 WCF 服務部署到已經承載 ASP.NET 2.0 內容(如 .aspx 頁和 ASP.NET Web 服務 [ASMX])的現有應用程序中。有關 這些選項的更多信息,請參見 WCF 服務和 ASP.NET 中的“并行承載 WCF 與 ASP.NET”和“在 ASP.NET 兼容性模式下承載 WCF 服務”兩節。
請注意,IIS 6.0 和更高版本定期重新啟動獨立的面向對象編程應用程序。默認值為 1740 分鐘。支持的最大值為 71,582 分鐘。可以禁用此重新啟動。有關 此屬性的更多信息,請參見 PeriodicRestartTime(可能為英文網頁)。
為 WCF 服務創建 .svc 文件
承載于 IIS 中的 WCF 服務在 IIS 應用程序內表示為特殊內容文件(.svc 文件)。此模型與在 IIS 應用程序內將 ASMX 頁表示為 .asmx 文件的方式類似。.svc 文件包含 WCF 特定的處理指令 (@ServiceHost),該指令允許 WCF 承載基礎結構激活所承載的服務以響應傳入消息。.svc 文件的最常見語法如以下語句所示。
復制代碼 <% @ServiceHost Service=”MyNamespace.MyServiceImplementationTypeName” %>它由 @ServiceHost 指令和單個屬性 Service 組成。Service 屬性的值是服務實現的公共語言運行庫 (CLR) 類型名稱。使用此指令與使用以下代碼創建服務主機基本等效。
復制代碼 new ServiceHost( typeof( MyNamespace.MyServiceImplementationTypeName ) );也可以執行其他承載配置,如創建服務的基址列表。也可以使用自定義 ServiceHostFactory 擴展指令以用于自定義承載解決方案。承載 WCF 服務的 IIS 應用程序不負責管理 ServiceHost 實例的創建和生存期。收到 .svc 文件的第一個請求時,托管 WCF 承載基礎結構動態創建必需的 ServiceHost 實例。在代碼顯式關閉該實例之前或回收應用程序時,不釋放該實例。
有關 .svc 文件語法的更多信息,請參見 @ServiceHost。
將服務實現部署到 IIS 應用程序
承載于 IIS 中的 WCF 服務與 ASP.NET 2.0 使用相同的動態編譯模型。就像在 ASP.NET 中那樣,可以在各種位置通過幾種方式部署承載于 IIS 中的 WCF 服務的實現代碼,如下所示:
- 作為全局程序集緩存 (GAC) 或應用程序的 \bin 目錄中的預編譯 .dll 文件。在部署類庫的新版本后,才更新預編譯的二進制文件。
- 作為位于應用程序的 \App_Code 目錄中的未編譯源文件。處理應用程序的第一個請求時,動態需要位于此目錄中的源文件。對 \App_Code 目錄中文件進行的任何更改都導致在收到下一個請求時回收和重新編譯整個應用程序。
- 作為直接放置在 .svc 文件中的未編譯代碼。實現代碼也可以按內聯方式位于服務的 .svc 文件中,且在 @ServiceHost 指令之后。對內聯代碼進行的任何更改導致在收到下一個請求時回收和重新編譯應用程序。
有關 ASP.NET 2.0 編譯模型的更多信息,請參見 ASP.NET 編譯概述(可能為英文網頁)。
配置 WCF 服務
承載于 IIS 中的 WCF 服務將其配置存儲在應用程序 Web.config 文件中。承載于 IIS 中的服務使用與承載于 IIS 外部的 WCF 服務相同的配置元素和語法。但是,下面的約束對 IIS 承載環境是唯一的:
- 承載于 IIS 中的服務的基址。
- 通過將一組基址 URI 傳遞到 ServiceHost 構造函數或者通過在服務配置中提供 <host> 元素,在 IIS 外部承載 WCF 服務的應用程序可以控制這些服務的基址。承載于 IIS 中的服務無法控制其基址;承載于 IIS 中的服務的基址是其 .svc 文件的地址。
承載于 IIS 中的服務的終結點地址
承載于 IIS 中時,任何終結點地址始終被認為相對于表示服務的 .svc 文件的地址。例如,如果 WCF 服務的基址是包含以下終結點配置的 http://localhost/Application1/MyService.svc。
復制代碼 <endpoint address=”anotherEndpoint” … />這提供了一個可以在“http://localhost/Application1/MyService.svc/anotherEndpoint”上訪問的終結點。
同樣,將空字符串用作相對地址的終結點配置元素提供了一個可以在 http://localhost/Application1/MyService.svc(它是基址)上訪問的終結點。
復制代碼 <endpoint address=”” … />對于承載于 IIS 中的服務的終結點,必須始終使用相對終結點地址。如果終結點地址未指向承載公開終結點的服務的 IIS 應用程序,則提供完全限定的終結點地址(例如,http://localhost/MyService.svc)可能導致在部署服務時出錯。對所承載的服務使用相對終結點地址避免了這些潛在沖突。
可用傳輸
承載于 IIS 5.1 和 IIS 6.0 中的 WCF 服務被限制為使用基于 HTTP 的通信。在這些 IIS 平臺上,將所承載的服務配置為使用非 HTTP 綁定會導致服務激活期間出錯。對于 IIS 7.0,支持的傳輸包括 HTTP、Net.TCP、Net.Pipe、Net.MSMQ 以及用于與現有 MSMQ 應用程序向后兼容的 msmq.formatname。
HTTP 傳輸安全
承載于 IIS 中的 WCF 服務可以使用 HTTP 傳輸安全(例如 HTTPS 和 HTTP 身份驗證方案,如基本、摘要式和 Windows 集成身份驗證),前提是包含該服務的 IIS 虛擬目錄支持這些設置。所承載終結點的綁定上的 HTTP 傳輸安全設置必須與包含它的 IIS 虛擬目錄上的傳輸安全設置匹配。
例如,配置為使用 HTTP 摘要式身份驗證的 WCF 終結點必須駐留在也配置為允許 HTTP 摘要式身份驗證的 IIS 虛擬目錄中。IIS 設置和 WCF 終結點設置的不匹配組合會導致服務激活期間出錯。
?
?轉自MSDN
轉載于:https://www.cnblogs.com/AlexLiu/archive/2009/03/17/1414730.html
總結
以上是生活随笔為你收集整理的部署承载于 Internet 信息服务中的 WCF 服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# default關鍵字
- 下一篇: Page.ClientScript.Re