方法 : Windows Communication Foundation サービス コントラクトを定義する

これは、基本的な Windows Communication Foundation (WCF) サービスとそのサービスを呼び出すことができるクライアントの作成に必要な 6 つのタスクのうちの最初のタスクです。6 つのすべてのタスクの概要については、「チュートリアル入門」を参照してください。

基本的な 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# プロジェクトの場合は、Program.cs というファイルが作成されます。このクラスには、Main() という空のメソッドが含まれます。VB プロジェクトの場合は、空のサブルーチン Main() を含む Module1.vb というファイルが作成されます。これらのメソッドはコンソール アプリケーション プロジェクトを正しくビルドするのに必要であるので、プロジェクトにそのまま残しておくことができます。

  4. 既定の Service 名前空間を Microsoft.ServiceModel.Samples に変更します。これを行うには、ソリューション エクスプローラーでプロジェクトを右クリックし、[プロパティ] をクリックします。[プロパティ] ダイアログ ボックスの左側にある [アプリケーション] タブが選択されていることを確認します。C# プロジェクトの場合は、[既定の名前空間] というラベルの付いたエディット ボックスに「Microsoft.ServiceModel.Samples」と入力します。C# プロジェクトの場合は、[ルート名前空間] というラベルの付いたエディット ボックスに「Microsoft.ServiceModel.Samples」と入力します。[ファイル] メニューをクリックし、[すべてを保存] をクリックして変更を保存します。

  5. C# を使用している場合は、次の例に示されているように、生成された Program.cs ファイルの名前空間を Microsoft.ServiceModel.Samples に変更します。

    namespace Microsoft.ServiceModel.Samples 
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
        }
    }
    

    VB を使用している場合は、次の例に示されているように、生成された Module1.vb に Namespace ステートメントと End Namespace ステートメントを追加します。

    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) が表示されるまで下にスクロールしてこの項目をクリックし、[OK] をクリックします。

    ms731835.note(ja-jp,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 という新しいインターフェイスを定義し、"http://Microsoft.ServiceModel.Samples" という Namespace 値を使用して、このインターフェイスに ServiceContractAttribute 属性を適用します。既定の名前空間値がコントラクト名に追加されるのを避けるために、名前空間を明示的に指定することをお勧めします。

    ms731835.note(ja-jp,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);
  }
}

これでインターフェイスが作成されました。このインターフェイスを実装するには、「方法 : Windows Communication Foundation サービス コントラクトを実装する」に進んでください。トラブルシューティングの詳細については、「チュートリアル入門のトラブルシューティング」を参照してください。

参照

処理手順

方法 : Windows Communication Foundation サービス コントラクトを実装する
入門サンプル
自己ホスト

リファレンス

ServiceContractAttribute
OperationContractAttribute