次の方法で共有


入門サンプル

GettingStarted サンプルでは、Windows Communication Foundation (WCF) を使用して一般的なサービスと一般的なクライアントを実装する方法を示します。 このサンプルは、他のすべての基本的なテクノロジ サンプルの基礎です。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

サービスは、パブリックにメタデータとして公開するサービス コントラクトで実行される操作を記述します。 サービスには、操作を実装するコードも含まれています。

クライアントには、サービス コントラクトの定義と、サービスにアクセスするためのプロキシ クラスが含まれています。 プロキシ コードは、 ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用してサービス メタデータから生成されます。

Windows Vista では、サービスは Windows ライセンス認証サービス (WAS) でホストされます。 Windows XP および Windows Server 2003 では、インターネット インフォメーション サービス (IIS) と ASP.NET によってホストされます。 IIS または WAS でサービスをホストすると、初めてアクセスするときにサービスを自動的にアクティブ化できます。

IIS ではなくコンソール アプリケーションでサービスをホストするサンプルの使用を開始する場合は、 セルフホスト サンプルを参照してください。

サービスとクライアントは、展開時に柔軟性を提供する構成ファイル設定でアクセスの詳細を指定します。 これには、アドレス、バインディング、およびコントラクトを指定するエンドポイント定義が含まれます。 バインディングは、サービスへのアクセス方法のトランスポートとセキュリティの詳細を指定します。

このサービスは、メタデータを公開するようにランタイム動作を構成します。

このサービスは、要求/応答通信パターンを定義するコントラクトを実装します。 コントラクトは、算術演算 (加算、減算、乗算、除算) を公開する ICalculator インターフェイスによって定義されます。 クライアントは特定の算術演算に対して要求を行い、サービスは結果と共に応答します。 サービスは、次のコードで定義されている ICalculator コントラクトを実装します。

' Define a service contract.
    <ServiceContract(Namespace:="http://Microsoft.Samples.GettingStarted")>
     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
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
    [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);
}

サービス実装は、次のコード例に示すように、適切な結果を計算して返します。

' Service class which implements the service contract.
Public Class CalculatorService
Implements ICalculator
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Add
Return n1 + n2
End Function

Public Function Subtract(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Subtract
Return n1 - n2
End Function

Public Function Multiply(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Multiply
Return n1 * n2
End Function

Public Function Divide(ByVal n1 As Double, ByVal n2 As Double) As Double Implements ICalculator.Divide
Return n1 / n2
End Function
End Class
// Service class that implements the service contract.
public class CalculatorService : ICalculator
{
    public double Add(double n1, double n2)
    {
        return n1 + n2;
    }
    public double Subtract(double n1, double n2)
    {
        return n1 - n2;
    }
    public double Multiply(double n1, double n2)
    {
        return n1 * n2;
    }
    public double Divide(double n1, double n2)
    {
        return n1 / n2;
    }
}

サービスは、次のサンプル構成に示すように、構成ファイル (Web.config) を使用して定義された、サービスと通信するためのエンドポイントを公開します。

<services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
        <!-- ICalculator is exposed at the base address provided by
         host: http://localhost/servicemodelsamples/service.svc.  -->
       <endpoint address=""
              binding="wsHttpBinding"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
       ...
    </service>
</services>

サービスは、IIS または WAS ホストによって提供されるベース アドレスでエンドポイントを公開します。 バインディングは、アドレス指定とセキュリティのための HTTP 通信と標準の Web サービス プロトコルを提供する標準の WSHttpBindingで構成されます。 コントラクトは、サービスによって実装される ICalculator です。

構成されている場合、同じコンピューター上のクライアントが http://localhost/servicemodelsamples/service.svc でサービスにアクセスできます。 リモート コンピューター上のクライアントがサービスにアクセスするには、localhost の代わりに完全修飾ドメイン名を指定する必要があります。

フレームワークでは、既定ではメタデータは公開されません。 そのため、サービスは ServiceMetadataBehavior をオンにし、 http://localhost/servicemodelsamples/service.svc/mexでメタデータ交換 (MEX) エンドポイントを公開します。 次の構成は、これを示しています。

<system.serviceModel>
  <services>
    <service
        name="Microsoft.ServiceModel.Samples.CalculatorService"
        behaviorConfiguration="CalculatorServiceBehavior">
      ...
      <!-- the mex endpoint is exposed at
       http://localhost/servicemodelsamples/service.svc/mex -->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="IMetadataExchange" />
    </service>
  </services>

  <!--For debugging purposes set the includeExceptionDetailInFaults
   attribute to true-->
  <behaviors>
    <serviceBehaviors>
      <behavior name="CalculatorServiceBehavior">
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="False" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

クライアントは、 ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) によって生成されたクライアント クラスを使用して、特定のコントラクト型を使用して通信します。 この生成されたクライアントは、ファイル generatedClient.csまたはgeneratedClient.vbに含まれています。 このユーティリティは、特定のサービスのメタデータを取得し、クライアント アプリケーションが特定のコントラクト型を使用して通信するために使用するクライアントを生成します。 ホストされるサービスは、更新されたメタデータを取得するために使用されるため、クライアント コードを生成するために使用できる必要があります。

クライアント ディレクトリの SDK コマンド プロンプトから次のコマンドを実行して、型指定されたプロキシを生成します。

svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /out:generatedClient.cs

Visual Basic でクライアントを生成するには、SDK コマンド プロンプトから次のように入力します。

Svcutil.exe /n:"http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples" http://localhost/servicemodelsamples/service.svc/mex /l:vb /out:generatedClient.vb

生成されたクライアントを使用すると、クライアントは適切なアドレスとバインドを構成することで、特定のサービス エンドポイントにアクセスできます。 サービスと同様に、クライアントは構成ファイル (App.config) を使用して、通信するエンドポイントを指定します。 クライアント エンドポイントの構成は、次の例に示すように、サービス エンドポイント、バインディング、コントラクトの絶対アドレスで構成されます。

<client>
     <endpoint
         address="http://localhost/servicemodelsamples/service.svc"
         binding="wsHttpBinding"
         contract=" Microsoft.ServiceModel.Samples.ICalculator" />
</client>

次のコード例に示すように、クライアント実装はクライアントをインスタンス化し、型指定されたインターフェイスを使用してサービスとの通信を開始します。

' Create a client
Dim client As New CalculatorClient()

' Call the Add service operation.
            Dim value1 = 100.0R
            Dim value2 = 15.99R
            Dim result = client.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)

' Call the Subtract service operation.
value1 = 145.00R
value2 = 76.54R
result = client.Subtract(value1, value2)
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result)

' Call the Multiply service operation.
value1 = 9.00R
value2 = 81.25R
result = client.Multiply(value1, value2)
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result)

' Call the Divide service operation.
value1 = 22.00R
value2 = 7.00R
result = client.Divide(value1, value2)
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result)

'Closing the client gracefully closes the connection and cleans up resources
// Create a client.
CalculatorClient client = new CalculatorClient();

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

// Call the Subtract service operation.
value1 = 145.00D;
value2 = 76.54D;
result = client.Subtract(value1, value2);
Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

// Call the Multiply service operation.
value1 = 9.00D;
value2 = 81.25D;
result = client.Multiply(value1, value2);
Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

// Call the Divide service operation.
value1 = 22.00D;
value2 = 7.00D;
result = client.Divide(value1, value2);
Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

//Closing the client releases all communication resources.
client.Close();

サンプルを実行すると、操作要求と応答がクライアント コンソール ウィンドウに表示されます。 クライアント ウィンドウで Enter キーを押して、クライアントをシャットダウンします。

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

作業の開始サンプルは、サービスとクライアントを作成する標準的な方法を示しています。 このサンプルのもう 1 つの 基本 ビルドでは、特定の製品機能を示します。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. シングル コンピューター構成またはクロスコンピューター構成でサンプルを実行するには、「 Windows Communication Foundation サンプルの実行」の手順に従います。

こちらも参照ください