教學課程:裝載和執行基本 Windows Communication Foundation 服務
本教學課程說明建立基本 Windows Communication Foundation (WCF) 應用程式所需的五項工作中的第三項。 如需教學課程的概觀,請參閱教學課程:開始使用 Windows Communication Foundation 應用程式。
建立 WCF 應用程式的下一項工作,是在主控台應用程式中裝載 WCF 服務。 WCF 服務會公開一或多個端點,其中每個端點都會公開一或多項服務作業。 服務端點會指定下列資訊:
- 一個位址,您可以在其中找到服務。
- 一個繫結,其中包含的資訊說明用戶端必須如何與服務通訊。
- 一個合約,定義服務提供給其用戶端的功能。
在本教學課程中,您會了解如何:
- 建立及設定裝載 WCF 服務的主控台應用程式專案。
- 新增程式碼以裝載 WCF 服務。
- 更新組態檔。
- 啟動 WCF 服務並確認正在執行中。
建立及設定裝載服務的主控台應用程式專案
在 Visual Studio 中建立主控台應用程式專案:
從 [檔案] 功能表中選取 [開啟]>[專案/解決方案],然後瀏覽至您先前建立的 GettingStarted 解決方案 (GettingStarted.sln)。 選取開啟。
從 [檢視] 功能表中選取 [方案總管]。
在 [方案總管] 視窗中選取 [GettingStarted] 解決方案 (最上層節點),然後從捷徑功能表中選取 [新增]>[新增專案]。
在 [新增專案] 視窗左側,選取 [Visual C#] 或 [Visual Basic] 底下的 [Windows 桌面] 類別。
選取 [主控台應用程式 (.NET Framework)] 範本,然後輸入 GettingStartedHost 作為 [名稱]。 選取 [確定]。
將 GettingStartedHost 專案中的參考新增至 GettingStartedLib 專案:
在 [方案總管] 視窗中,選取 GettingStartedHost 專案底下的 [參考] 資料夾,然後從捷徑功能表中選取 [新增參考]。
在 [新增參考] 對話方塊中,從視窗左側的 [專案] 底下選取 [解決方案]。
選取視窗中央區段的 GettingStartedLib,然後選取 [確定]。
此動作讓 GettingStartedHost 專案能夠使用 GettingStartedLib 專案中定義的型別。
將 GettingStartedHost 專案中的參考新增至 System.ServiceModel 組件:
在 [方案總管] 視窗中,選取 GettingStartedHost 專案底下的 [參考] 資料夾,然後從捷徑功能表中選取 [新增參考]。
在 [新增參考] 視窗左側,選取 [組件] 底下的 [架構]。
選取 System.ServiceModel,然後選取 [確定]。
選取 [檔案]>[全部儲存] 以儲存解決方案。
新增程式碼以裝載服務
若要裝載服務,您可以新增程式碼以執行下列步驟:
- 建立基底位址的 URI。
- 建立用來裝載服務的類別執行個體。
- 建立服務端點。
- 啟用中繼資料交換。
- 開啟服務主機以接聽傳入訊息。
對程式碼進行以下更改:
在 GettingStartedHost 專案中開啟 Program.cs 或 Module1.vb 檔案,並將其程式碼取代為下列程式碼:
using System; using System.ServiceModel; using System.ServiceModel.Description; using GettingStartedLib; namespace GettingStartedHost { class Program { static void Main(string[] args) { // Step 1: Create a URI to serve as the base address. Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/"); // Step 2: Create a ServiceHost instance. ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress); try { // Step 3: Add a service endpoint. selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService"); // Step 4: Enable metadata exchange. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; selfHost.Description.Behaviors.Add(smb); // Step 5: Start the service. selfHost.Open(); Console.WriteLine("The service is ready."); // Close the ServiceHost to stop the service. Console.WriteLine("Press <Enter> to terminate the service."); Console.WriteLine(); Console.ReadLine(); selfHost.Close(); } catch (CommunicationException ce) { Console.WriteLine("An exception occurred: {0}", ce.Message); selfHost.Abort(); } } } }
Imports System.ServiceModel Imports System.ServiceModel.Description Imports GettingStartedLib.GettingStartedLib Module Service Class Program Shared Sub Main() ' Step 1: Create a URI to serve as the base address. Dim baseAddress As New Uri("http://localhost:8000/GettingStarted/") ' Step 2: Create a ServiceHost instance. Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress) Try ' Step 3: Add a service endpoint. selfHost.AddServiceEndpoint( _ GetType(ICalculator), _ New WSHttpBinding(), _ "CalculatorService") ' Step 4: Enable metadata exchange. Dim smb As New ServiceMetadataBehavior() smb.HttpGetEnabled = True selfHost.Description.Behaviors.Add(smb) ' Step 5: Start the service. selfHost.Open() Console.WriteLine("The service is ready.") ' Close the ServiceHost to stop the service. Console.WriteLine("Press <Enter> to terminate the service.") Console.WriteLine() Console.ReadLine() selfHost.Close() Catch ce As CommunicationException Console.WriteLine("An exception occurred: {0}", ce.Message) selfHost.Abort() End Try End Sub End Class End Module
如需此程式碼運作方式的相關資訊,請參閱服務裝載程式步驟。
更新專案屬性:
在 [方案總管] 視窗中選取 [GettingStartedHost] 資料夾,然後從捷徑功能表中選取 [屬性]。
在 [GettingStartedHost] 屬性頁面上,選取 [應用程式] 索引標籤:
針對 C# 專案,請從 [啟始物件] 清單中選取 GettingStartedHost.Program。
針對 Visual Basic 專案,請從 [啟始物件] 清單中選取 Service.Program。
從 [檔案] 功能表中選取 [全部儲存]。
確認服務正在執行
建置解決方案,然後從 Visual Studio 內執行 GettingStartedHost 主控台應用程式。
此服務必須以系統管理員權限執行。 由於您是以系統管理員權限開啟 Visual Studio 的,當您在 Visual Studio 中執行 GettingStartedHost 時,應用程式也會以系統管理員權限執行。 或者,您也可以用系統管理員身分開啟新的命令提示字元 (從捷徑功能表中選取 [更多]>[以系統管理員身分執行]),並在其中執行 GettingStartedHost.exe。
開啟網頁瀏覽器,並經由
http://localhost:8000/GettingStarted/
瀏覽至服務的頁面。注意
此類服務需要適當權限才能將 HTTP 位址註冊到機器上,以便接聽。 系統管理員帳戶具有此權限,但是非系統管理員帳戶則必須被授與 HTTP 命名空間的權限。 如需如何設定命名空間保留的詳細資訊,請參閱設定 HTTP 和 HTTPS。
服務裝載程式步驟
您在程式碼中新增用以裝載服務的步驟說明如下:
步驟 1:建立
Uri
類別的執行個體以保存服務的基底位址。 包含基底位址的 URL 具有可識別服務的選用 URI。 基底位址的格式如下:<transport>://<machine-name or domain><:optional port #>/<optional URI segment>
。 計算機服務的基底位址會使用 HTTP 傳輸、localhost、連接埠 8000 和 URI 區段 GettingStarted。步驟 2:建立 ServiceHost 類別的執行個體,供您用來裝載服務。 建構函式接受兩個參數:實作服務合約之類別的型別以及服務的基底位址。
步驟 3:建立 ServiceEndpoint 執行個體。 服務端點是由位址、繫結和服務合約所組成。 ServiceEndpoint 建構函式由服務合約介面型別、繫結和位址組成。 服務合約是您在服務類型中所定義和實作的
ICalculator
。 此範例的繫結是 WSHttpBinding,這是內建繫結,會連線至符合 WS-* 規格的端點。 如需 WCF 繫結的詳細資訊,請參閱 WCF 繫結概觀。 您可將位址附加至基底位址以識別端點。 此程式碼會將位址指定為 CalculatorService,並將端點的完整位址指定為http://localhost:8000/GettingStarted/CalculatorService
。重要
對於 .NET Framework 第 4 版和更新版本,新增服務端點是選擇性的。 在這些版本中,若未新增程式碼或組態,WCF 將會為服務所實作之合約與基底位址的每個組合新增一個預設端點。 如需預設端點的詳細資訊,請參閱指定端點位址。 如需預設端點、繫結和行為的詳細資訊,請參閱簡化的組態和 WCF 服務的簡化組態。
步驟 4:啟用中繼資料交換。 用戶端會使用中繼資料交換產生用來呼叫服務作業的 Proxy。 若要啟用中繼資料交換,請建立 ServiceMetadataBehavior 執行個體,將其 HttpGetEnabled 屬性設定為
true
,並將ServiceMetadataBehavior
物件新增至 ServiceHost 執行個體的 Behaviors 集合。步驟 5:開啟 ServiceHost 以接聽傳入訊息。 應用程式會等候您按 Enter 鍵。 應用程式具現化 ServiceHost 之後,會執行 try/catch 區塊。 若要深入了解如何安全地攔截 ServiceHost 擲回的例外狀況,請參閱使用 Close 和 Abort 釋放 WCF 用戶端資源。
重要
在新增 WCF 服務程式庫時,如果您藉由啟動服務主機對其進行偵錯,Visual Studio 將會為您裝載該程式庫。 若要避免衝突,您可以阻止 Visual Studio 裝載 WCF 服務程式庫。
- 在方案總管中選取 GettingStartedLib 專案,然後從捷徑功能表中選擇 [屬性]。
- 選取 [WCF 選項],然後取消勾選 [在同一個方案中對另一個專案偵錯時啟動 WCF 服務主機]。
下一步
在本教學課程中,您已了解如何:
- 建立及設定裝載 WCF 服務的主控台應用程式專案。
- 新增程式碼以裝載 WCF 服務。
- 更新組態檔。
- 啟動 WCF 服務並確認正在執行中。
前往下一個教學課程,了解如何建立 WCF 用戶端。