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

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

更新日: 2015年1月

これは、基本的な Service Bus Service およびそれを呼び出すことができる Client を作成するために必要な 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. クライアント アプリケーションを実行する前に、サービス アプリケーションが動作していることを確認します。

    Echo サービス アプリケーションの実行可能ファイルが EchoService.exe という名前で作成され、サービス プロジェクト フォルダーの \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. クライアント アプリケーションを実行します。

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

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

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

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

    サービス アプリケーションに送信するテキストを入力し、Enter キーを押します。

    このテキストは Echo サービスの操作によってサービスに送信され、次の出力例のようにサービス コンソール ウィンドウに表示されます。

    Echoing: My sample text

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

    Server echoed: My sample text
  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:基本 Web Service をホストし、実行し、Service Bus に登録する」を参照してください。

セキュリティ

表示:
© 2015 Microsoft