共用方式為


HOW TO:定義 Windows Communication Foundation 服務合約

這是在建立基本 Windows Communication Foundation (WCF) 服務,及可以呼叫該服務的用戶端時,必須進行的六個工作中的第一個。 如需這六個工作的概觀,請參閱使用者入門教學課程主題。

建立基本 WCF 服務時,第一項工作是要定義合約。 合約會指定服務所支援的作業。 作業可以視為一種 Web 服務方法。 合約可以透過定義 C++、C# 或 Visual Basic (VB) 介面來建立。 介面中的每一個方法都會對應到一個特定的服務作業。 每一個介面都要有套用一個 ServiceContractAttribute,而且每一個作業都必須套用一個 OperationContractAttribute。 如果有 ServiceContractAttribute 之介面內的方法沒有 OperationContractAttribute,則不會公開該方法。

用於這項工作的程式碼將於本程序之後的範例中提供。

若要使用介面建立 Windows Communication Foundation 合約

  1. 以滑鼠右鍵按一下 [開始] 功能表中的程式,並選取 [以系統管理員身分執行],以系統管理員的身分開啟 Visual Studio 2010。

  2. 建立新的主控台應用程式專案。 按一下 [檔案] 功能表,然後選取 [新增],再選取 [專案]。 選取 [新增專案] 對話方塊中的 [Visual Basic] 或 [Visual C#],然後選擇 [主控台應用程式] 範本,並將其命名為 Service。 使用預設的 [位置]。

  3. 為 C# 專案 Visual Studio 建立一個稱為 Program.cs 的檔案。 此類別將包含稱為 Main() 的空白方法。 為 VB 專案 Visual Studio 建立一個稱為 Module1.vb 的檔案,以及一個稱為 Main() 的空白副程式。 主控台應用程式專案需要這些方法才能正確建立,因此,您可以將它們安全地留在專案中。

  4. 將預設的 Service 命名空間變更為 Microsoft.ServiceModel.Samples。 若要這樣做,請以滑鼠右鍵按一下 [方案總管] 中的專案,並且選取 [屬性]。 請確認已選取 [屬性] 對話方塊左側的 [應用程式] 索引標籤。 針對 C# 專案,請在標記為 [預設命名空間] 的編輯方塊中輸入 Microsoft.ServiceModel.Samples。 針對 VB 專案,請在標記為 [] 命名空間的編輯方塊中輸入 Microsoft.ServiceModel.Samples。 按一下 [檔案] 功能表,然後選取 [全部儲存] 儲存您的變更。

  5. 如果您使用的是 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
    
  6. 在專案中加入 System.ServiceModel.dll 的參考:

    1. 在 [方案總管] 中,以滑鼠右鍵按一下專案資料夾下方的 [參考] 資料夾,然後選擇 [加入參考]。

    2. 選取 [加入參考] 對話方塊中的 [.NET] 索引標籤並向下捲動,直到您看到 [System.ServiceModel] (4.0.0.0 版),選取它,然後按一下 [確定]。

    ms731835.note(zh-tw,VS.100).gif注意:
    使用命令列編譯器時 (例如,Csc.exe 或 Vbc.exe),必須同時提供組件的路徑。 根據預設,以執行 Windows Vista 的電腦為例,路徑為:"Windows\Microsoft.NET\Framework\v4.0"。

  7. System.ServiceModel 命名空間新增 using 陳述式 (Visual Basic 中的 Imports)。

    Imports System.ServiceModel
    
    using System.ServiceModel;
    
  8. 定義稱為 ICalculator 的新介面,然後將 ServiceContractAttribute 屬性套用到介面,並將 Namespace 值設為 "http://Microsoft.ServiceModel.Samples"。 明確的指定命名空間是最理想的作法,因為如此一來,預設的命名空間值便不會加入合約名稱。

    ms731835.note(zh-tw,VS.100).gif注意:
    使用屬性對介面或類別進行標註時,您可以在屬性名稱中省略 "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
    
  9. 在介面中,為每一個 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 服務合約
使用者入門範例
自我裝載

參考

ServiceContractAttribute
OperationContractAttribute