このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開

手順 4:基本 Web Service をホストし、実行し、Service Bus に登録する

更新日: 2015年1月

これは、基本の Service Bus Service アプリケーションとそのサービスを呼び出すクライアントを作成するために必要な 7 つのタスクのうちの 4 番目です。7 つすべてのタスクの概要については、「Service Bus リレー型メッセージングのチュートリアル」を参照してください。このトピックでは、基本的な Service Bus Service を実行する方法について説明します。

このタスクで記述されるコードの完全な一覧は手順の後に紹介する例にあります。

推定完了時刻:10 分

  1. Microsoft.ServiceBus.dll への参照をプロジェクトに追加します。「NuGet Service Bus パッケージの使用」を参照してください。

    noteメモ
    コマンドライン コンパイラ (Csc.exe など) を使用する場合は、アセンブリのパスも指定する必要があります。

  2. Program.cs で、Microsoft.ServiceBus 名前空間の using ステートメントを追加します。

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus は、Service Bus のコア機能の多くにプログラムでアクセスできる API を含む名前空間です。ほとんどの場合、この名前空間をすべての Service Bus アプリケーションで使用します。

  3. Main() メソッドで、サービスの名前空間、発行者名、およびコンソール ウィンドウから読み込まれる発行者のシークレット (名前/パスワードの資格情報) を格納する 3 つの変数を作成します。

    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();
    

    発行者名と発行者のシークレットは後で Service Bus プロジェクトにアクセスするために使用されます。サービスの名前空間 はサービス URI を作成するために CreateServiceUri にパラメーターとして渡されます。

  4. TransportClientEndpointBehavior オブジェクトを使用し、資格情報として共有シークレットを使用することを宣言します。最後の手順で追加したコードのすぐ下に次のコードを追加します。

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

  1. 最後の手順で追加したコードに続け、サービスのベース アドレスに Uri インスタンスを作成します。この URI により、Service Bus スキーム、サービスの名前空間、サービス インターフェイスのパスが指定されます。

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

    “sb” は Service Bus スキームの省略形であり、プロトコルとして TCP を使用していることを示します。これは以前も、NetTcpRelayBinding がバインドとして指定されたとき、構成ファイルで示されました。

    このチュートリアルでは、URI は sb://putServiceNamespaceHere.windows.net/EchoService です。

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

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    接続モードはサービスが Service Bus との通信に使用するプロトコルを表します。つまり、HTTP または TCP です。既定の設定である AutoDetect を使用し、サービスは TCP が利用できる場合は TCP で、TCP が利用できない場合は HTTP で Service Bus に接続を試行します。これはサービスがクライアント通信に指定するプロトコルとは異なることに注意してください。そのプロトコルは使用されるバインドにより決定されます。たとえば、サービスは BasicHttpRelayBinding バインドを利用できます。これは (Service Bus で公開される) そのエンドポイントが HTTP でクライアントと通信することを指定します。その同じサービスが ConnectivityMode.AutoDetect を指定すれば、サービスは Service Bus と TCP で通信できます。

  2. このセクションで先に作成した URI を使用し、サービス ホストを作成します。

    ServiceHost host = new ServiceHost(typeof(EchoService), address);
    

    サービス ホストはサービスをインスタンス化する WCF オブジェクトです。ここで、作成するサービスの種類 (EchoService 型) とサービスを公開するアドレスをそれに渡します。

  3. Program.cs ファイルの一番上に、System.ServiceModel.DescriptionMicrosoft.ServiceBus.Description の参照を追加します。

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. Main() に戻り、パブリック アクセスを有効にするようにエンドポイントを構成します。

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    この手順により、プロジェクトの Service Bus ATOM フィードを調べることでアプリケーションを公的に見つけられることを Service Bus に通知します。DiscoveryTypeprivate に設定した場合、クライアントは引き続きサービスにアクセスできます。ただし、Service Bus 名前空間を検索するとき、サービスは表示されません。代わりに、クライアントはエンドポイントのパスを事前に認識しておく必要があります。詳細については、「Service Bus Service の検出と公開」を参照してください。

  5. サービスの資格情報が App.config ファイルで定義されているサービス エンドポイントに適用されます。

    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }
    

    前の手順で説明したように、構成ファイルに複数のサービスとエンドポイントを宣言しておくことができます。その場合、このコードは構成ファイルを横断し、資格情報を適用しなければならないあらゆるエンドポイントを検索します。ただし、このチュートリアルでは、構成ファイルのエンドポイントは 1 つだけです。

  1. サービスを開きます。

    host.Open();
    
  2. サービスが実行中であることをユーザーに通知し、サービスのシャットダウン方法を説明します。

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. 完了したら、サービス ホストを閉じます。

    host.Close();
    
  4. F6 キーを押し、プロジェクトをビルドします。

使用例

次の例では、チュートリアルの前の手順のサービス コントラクトと実装を含み、コンソール アプリケーションでサービスをホストします。次をコンパイルし、「EchoService.exe」という名前の実行可能ファイルを生成します。

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

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 { };

    [ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    class EchoService : IEchoContract
    {
        public string Echo(string text)
        {
            Console.WriteLine("Echoing: {0}", text);
            return text;
        }
    }

    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();

           // Create the credentials object for the endpoint.
            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);


            // Create the service URI based on the service namespace.
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            // Create the service host reading the configuration.
            ServiceHost host = new ServiceHost(typeof(EchoService), address);

            // Create the ServiceRegistrySettings behavior for the endpoint.
            IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

            // Add the Service Bus credentials to all endpoints specified in configuration.
            foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
            {
                endpoint.Behaviors.Add(serviceRegistrySettings);
                endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
            }
            
            // Open the service.
            host.Open();

            Console.WriteLine("Service address: " + address);
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            // Close the service.
            host.Close();
        }
    }
}

これでインターフェイスが作成されました。「手順 5:サービス コントラクト用の WCF クライアントを作成する」に進み、インターフェイスを実装してください。

表示:
© 2015 Microsoft