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