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

手順 4 :Service Bus に登録する基本的な Web サービスをホストして実行する

更新日: 2014年6月

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

このタスクに記述されているすべてのコードの一覧は、手順の後の例に記載されています。

完了予測時間:10 分

Service Bus の資格情報を作成するには

  1. Microsoft.ServiceBus.dll への参照をプロジェクトに追加します。

    1. ソリューション エクスプローラーで、プロジェクト フォルダーの下の [参照] を右クリックし、[参照の追加] をクリックします。

    2. [参照の追加] ダイアログ ボックスの [.NET] タブを選択し、[Microsoft.ServiceBus] が表示されるまで下にスクロールします。または、[参照] をクリックし、ハード ドライブ上のアセンブリまで移動します。通常、このアセンブリは Program Files\<sdkInstallDirectory>\v1.0\Assemblies\NET4.0 にあります。[Microsoft.ServiceBus] アセンブリを選択し、[OK] をクリックします。

    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 を使用して、サービスが Service Bus への接続を試みます。TCP が利用可能な場合は TCP 経由、TCP が利用不可の場合は HTTP 経由になります。これは、クライアントとの通信にサービスで指定したプロトコルによって異なります。そのプロトコルは、使用するバインドによって決まります。 たとえば、サービスはエンドポイント (Service Bus に公開済み) が HTTP 経由でクライアントと通信することを指定する BasicHttpRelayBinding バインドを使用することができます。 同じサービスで、ConnectivityMode.AutoDetect を指定すると、サービスが TCP 経由で Service Bus と通信するようにできます。

  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 クライアントを作成する」に進んでインターフェイスを実装します。

コミュニティの追加

追加
表示:
© 2014 Microsoft