HOW TO:定義 Windows Communication Foundation 服務合約
這是在建立基本 Windows Communication Foundation (WCF) 服務,及可以呼叫該服務的用戶端時,必須進行的六個工作中的第一個。 如需這六個工作的概觀,請參閱使用者入門教學課程主題。
建立基本 WCF 服務時,第一項工作是要定義合約。 合約會指定服務所支援的作業。 作業可以視為一種 Web 服務方法。 合約可以透過定義 C++、C# 或 Visual Basic (VB) 介面來建立。 介面中的每一個方法都會對應到一個特定的服務作業。 每一個介面都要有套用一個 ServiceContractAttribute,而且每一個作業都必須套用一個 OperationContractAttribute。 如果有 ServiceContractAttribute 之介面內的方法沒有 OperationContractAttribute,則不會公開該方法。
用於這項工作的程式碼將於本程序之後的範例中提供。
若要使用介面建立 Windows Communication Foundation 合約
以滑鼠右鍵按一下 [開始] 功能表中的程式,並選取 [以系統管理員身分執行],以系統管理員的身分開啟 Visual Studio 2010。
建立新的主控台應用程式專案。 按一下 [檔案] 功能表,然後選取 [新增],再選取 [專案]。 選取 [新增專案] 對話方塊中的 [Visual Basic] 或 [Visual C#],然後選擇 [主控台應用程式] 範本,並將其命名為
Service
。 使用預設的 [位置]。為 C# 專案 Visual Studio 建立一個稱為 Program.cs 的檔案。 此類別將包含稱為 Main() 的空白方法。 為 VB 專案 Visual Studio 建立一個稱為 Module1.vb 的檔案,以及一個稱為 Main() 的空白副程式。 主控台應用程式專案需要這些方法才能正確建立,因此,您可以將它們安全地留在專案中。
將預設的
Service
命名空間變更為Microsoft.ServiceModel.Samples
。 若要這樣做,請以滑鼠右鍵按一下 [方案總管] 中的專案,並且選取 [屬性]。 請確認已選取 [屬性] 對話方塊左側的 [應用程式] 索引標籤。 針對 C# 專案,請在標記為 [預設命名空間] 的編輯方塊中輸入Microsoft.ServiceModel.Samples
。 針對 VB 專案,請在標記為 [根] 命名空間的編輯方塊中輸入Microsoft.ServiceModel.Samples
。 按一下 [檔案] 功能表,然後選取 [全部儲存] 儲存您的變更。如果您使用的是 C#,將產生之 Program.cs 檔案中的命名空間變更為
Microsoft.ServiceModel.Samples
,如下列範例所示。namespace Microsoft.ServiceModel.Samples { class Program { static void Main(string[] args) { } } }
如果您使用的是 VB,將 Namespace 陳述式以及 End Namespace 陳述式加入至產生的 Module1.vb,如下列範例所示。
Namespace Microsoft.ServiceModel.Samples Module Module1 Sub Main() End Sub End Module End Namespace
在專案中加入 System.ServiceModel.dll 的參考:
在 [方案總管] 中,以滑鼠右鍵按一下專案資料夾下方的 [參考] 資料夾,然後選擇 [加入參考]。
選取 [加入參考] 對話方塊中的 [.NET] 索引標籤並向下捲動,直到您看到 [System.ServiceModel] (4.0.0.0 版),選取它,然後按一下 [確定]。
注意: 使用命令列編譯器時 (例如,Csc.exe 或 Vbc.exe),必須同時提供組件的路徑。 根據預設,以執行 Windows Vista 的電腦為例,路徑為:"Windows\Microsoft.NET\Framework\v4.0"。 為 System.ServiceModel 命名空間新增 using 陳述式 (Visual Basic 中的 Imports)。
Imports System.ServiceModel
using System.ServiceModel;
定義稱為
ICalculator
的新介面,然後將 ServiceContractAttribute 屬性套用到介面,並將 Namespace 值設為 "http://Microsoft.ServiceModel.Samples"。 明確的指定命名空間是最理想的作法,因為如此一來,預設的命名空間值便不會加入合約名稱。注意: 使用屬性對介面或類別進行標註時,您可以在屬性名稱中省略 "Attribute" 的部分。 因此,ServiceContractAttribute 在 C# 中會變成 [ServiceContract],而在 Visual Basic 中會變成 <ServiceContract>。 <ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _ Public Interface ICalculator
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] public interface ICalculator
在介面中,為每一個
ICalculator
合約所公開的作業 (加/減/乘/除),宣告一個方法,然後在每一個想公開為公用 WCF 合約一部分的方法中,套用 OperationContractAttribute 屬性。<OperationContract()> _ Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double <OperationContract()> _ Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
[OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2);
範例
下列程式碼範例會顯示可定義服務合約的基本介面。
Imports System
' Step 5: Add the Imports statement for the System.ServiceModel namespace
Imports System.ServiceModel
Namespace Microsoft.ServiceModel.Samples
' Step 6: Define a service contract.
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
<OperationContract()> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double
<OperationContract()> _
Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double
End Interface
End Namespace
using System;
// Step 5: Add the using statement for the System.ServiceModel namespace
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
// Step 6: Define a service contract.
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
// Step7: Create the method declaration for the contract.
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
}
此介面現在已建立,請繼續進行 HOW TO:實作 Windows Communication Foundation 服務合約以實作該介面。 如需疑難排解的詳細資訊,請參閱使用者入門教學課程疑難排解。
另請參閱
工作
HOW TO:實作 Windows Communication Foundation 服務合約
使用者入門範例
自我裝載