エクスポート (0) 印刷
すべて展開

手順 7 :Service Bus を呼び出すために WCF クライアントを実装する

更新日: 2014年6月

これは、基本的なService Bus サービスと、そのサービスを呼び出すことができるクライアントを作成するために必要な 7 つのタスクの最後です。7 つのタスクすべての概要については、「Service Bus によって中継型メッセージングのチュートリアル」をご覧ください。

このトピックでは、このチュートリアルの前の手順で作成したサービスにアクセスする基本的なクライアント アプリケーションを実装する方法について説明します。サービスと同様に、クライアントでも Service Bus へのアクセスに多くの同じ操作を実行します:

  1. 接続モードを設定します。

  2. ホスト サービスの場所を特定する URI を作成します。

  3. セキュリティ資格情報を定義します。

  4. 資格情報を接続に適用します。

  5. 接続を開きます。

  6. アプリケーション固有のタスクを実行します。

  7. 接続を終了します。

ただし、主な違いの 1 つとして、サービスは Service Bus への接続に ServiceHost の呼び出しを使用しますが、クライアント アプリではチャネルを使用します。これらのタスクで使用されるコードは、手順の後の例で示されています。

完了までの時間:15 分

  1. 接続モードを AutoDetect に設定します。

    クライアント アプリケーションの Main() メソッドの中に次のコードを追加します。

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    
  2. コンソールから読み取られるサービスの名前空間、発行者名、および発行者のシークレットの値を保持する変数を定義します。

    
    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your Issuer Name: ");
    string issuerName = Console.ReadLine();
    Console.Write("Your Issuer Secret: ");
    string issuerSecret = Console.ReadLine();
    
    
    
  3. Service Bus プロジェクトにおけるホストの場所を定義する URI を作成します。

    Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    
    
  4. サービスの名前空間エンドポイントの資格情報オブジェクトを作成します。

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    
  5. App.config ファイルに記述された構成を読み込むチャネル ファクトリを作成します。

    ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));
    

    チャネル ファクトリは、サービスとクライアント アプリケーションの通信に使われるチャネルを作成する WCF オブジェクトです。

  6. Service Busの資格情報を適用します。

    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    
  7. サービスへのチャネルを作成し、作成したチャネルを開きます。

    IEchoChannel channel = channelFactory.CreateChannel();
    channel.Open();
    
  8. エコー用の基本的なユーザー インターフェイスと機能を記述します。

    Console.WriteLine("Enter text to echo (or [Enter] to exit):");
    string input = Console.ReadLine();
    while (input != String.Empty)
    {
        try
        {
            Console.WriteLine("Server echoed: {0}", channel.Echo(input));
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
        input = Console.ReadLine();
    }
    

    このコードでは、チャネル オブジェクトのインスタンスをサービスのプロキシとして使用していることに注意してください。

  9. チャネルを終了し、ファクトリを終了します。

    channel.Close();
    channelFactory.Close();
    

  1. F6 キーを押して、ソリューションをビルドします。

    これにより、このチュートリアルの前の手順で作成したクライアント プロジェクトとサービス プロジェクトの両方がビルドされ、それぞれの実行可能ファイルが作成されます。

  2. クライアント アプリケーションを実行する前に、サービス アプリケーションが実行されていることを確認してください。

    この時点で、EchoService.exe という Echo サービス アプリケーションの実行可能ファイルがサービス プロジェクト フォルダーに生成されています (デバッグ構成の場合は \bin\Debug\EchoService.exe、リリース構成の場合は \bin\Release\EchoService.exe)。このファイルをダブルクリックしてサービス アプリケーションを起動します。

  3. コンソール ウィンドウが開き、サービスの名前空間の入力を求められます。このコンソール ウィンドウでサービスの名前空間を入力し、Enter キーを押します。

  4. 次に、発行者名の入力を求められます。発行者名を入力し、Enter キーを押します。

  5. 発行者名を入力した後、発行者のシークレットを入力し、Enter キーを押します。

    コンソール ウィンドウの出力例を次に示します。ここに示した値は単なる例であることに注意してください。

    Your Service Namespace:myNamespace
    Your Issuer Name:owner
    Your Issuer Secret:1deCBMEhx/RV3bgwIhCohqdtzj/ZG2WnyC1cLhHTpk4=

    サービス アプリケーションが起動し、アプリケーションがリッスンしているアドレスが次の例のようにコンソール ウィンドウに出力されます。

    Service address:sb://mynamespace.servicebus.windows.net/EchoService/
    Press [Enter] to exit
  6. クライアント アプリケーションを実行します。

    この時点で、EchoClient.exe という Echo クライアント アプリケーションの実行可能ファイルがクライアント プロジェクト ディレクトリに生成されています (デバッグ構成の場合は .\bin\Debug\EchoClient.exe、リリース構成の場合は .\bin\Release\EchoClient.exe)。このファイルをダブルクリックしてクライアント アプリケーションを起動します。

  7. コンソール ウィンドウが開き、前の手順でサービス アプリケーションに関して入力したものと同じ情報の入力を求められます。前と同じ手順に従って、クライアント アプリケーションのサービスの名前空間、発行者名、および発行者シークレットに同じ値を入力します。

  8. これらの値を入力すると、クライアントからサービスへのチャネルが開き、次のコンソール出力例に示すようにテキストの入力を求められます。

    Enter text to echo (or [Enter] to exit):

    Enter some text to send to the service application and press ENTER.

    このテキストは Echo サービス操作を介してサービスに送信され、サービス コンソール ウィンドウに表示されます。次の出力例を参照してください。

    Echoing:自分のサンプル テキスト

    クライアント アプリケーションは Echo 操作の戻り値 (入力された元のテキスト) を受信し、受信したテキストをクライアント コンソール ウィンドウに出力します。クライアント コンソール ウィンドウの出力例を次に示します。

    Server echoed:自分のサンプル テキスト
  9. この方法でクライアントからサービスにテキスト メッセージを続けて送信できます。送信が完了したら、クライアント コンソール ウィンドウとサービス コンソール ウィンドウで Enter キーを押して両方のアプリケーションを終了します。

使用例

次の例は、クライアント アプリケーションを作成する方法、サービスの操作を呼び出す方法、および操作の呼び出し完了後にクライアントを終了する方法を示しています。

using System;
using Microsoft.ServiceBus;
using System.ServiceModel;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { }

    class Program
    {
        static void Main(string[] args)
        {
            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

            Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);

            ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));

            channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);

            IEchoChannel channel = channelFactory.CreateChannel();
            channel.Open();

            Console.WriteLine("Enter text to echo (or [Enter] to exit):");
            string input = Console.ReadLine();
            while (input != String.Empty)
            {
                try
                {
                    Console.WriteLine("Server echoed: {0}", channel.Echo(input));
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e.Message);
                }
                input = Console.ReadLine();
            }

            channel.Close();
            channelFactory.Close();

        }
    }
}

クライアントを起動する前に、サービスが実行されていることを確認してください。詳細については、「手順 4 :Service Bus に登録する基本的な Web サービスをホストして実行する」を参照してください。

セキュリティ

表示:
© 2014 Microsoft