エクスポート (0) 印刷
すべて展開
このトピックはまだ評価されていません - このトピックを評価する

方法: Service Bus にアクセスする REST ベースのサービスを作成する

Windows Azure は現在、REST ベースのサービスとして扱われる 2 種類のスタイルのアプリケーションをサポートします。1 つは Web プログラミング モデルに従う従来のService Bus アプリケーションであり、もう 1 つはメッセージ バッファーを使用する HTTP 準拠のアプリケーションです。

  • 従来のアプリケーション

    このスタイルのアプリケーションは、基本的な Windows Communication Foundation (WCF) プログラミング モデルを使用します。つまり、サービス コントラクトを定義して作成し、バインドとセキュリティ資格情報を使用してService Busに接続します。追加された主なことは、REST ベースのService Bus アプリケーションは、メンバーに [OperationContract, WebGet] または [OperationContract, WebInvoke] 属性が適用されるサービス コントラクトを使用することです。これらの動作では、インターフェイスは REST インターフェイスとして定義され、Service Busは他の REST スタイル アプリケーションと対話できます。したがって、アプリケーションには、HTTP スタイルのメッセージを作成できるようにする追加のコードが含まれます。最後に、これらのアプリケーションはすべて、WebHttpRelayBinding バインドを使用します。詳細については、次のトピックを参照してください。、方法: Service Bus を通じて REST ベースの Web サービスを公開する」を参照してください。REST ベースのサービス アプリケーションに関する本格的な例については、「Service Bus REST チュートリアル」を参照してください。この記事は、Windows Azure SDK の WebHttp サンプルが基になっています。

  • メッセージ バッファー アプリケーション

    "メッセージ バッファー" は、バッファーの場所に REST インターフェイスを公開するService Busの機能です。他のバッファーと同じように、送信側アプリケーションは、このメッセージ バッファーを使用して、メッセージとイベントを一時的に格納できます。同様に、クライアント アプリケーションはメッセージ バッファーをサブスクライブして、格納されているメッセージまたはイベントを受け取ることができます。インターフェイスはService Busを通して公開されるので、インターネットに接続できるすべてのアプリケーションが使用できます。メッセージ バッファーは REST スタイルのインターフェイスなので、JavaScript アプリケーション、Web ブラウザー、マイクロソフト以外の製品など、WCF スタイルではないアプリケーションを使用して接続できます。これには、JavaScript でのサービスの作成も含まれます。ただし、この技術は標準的なService Bus アプリケーションとは大きく異なるので、セクションを分けて説明します。メッセージ バッファーと対話するアプリケーションの作成の詳細情報:、「メッセージ バッファーの概要」を参照してください。

メッセージ バッファーについてはドキュメントに専用のセクションがあるので、このトピックでは、主に REST 標準を使用する基本的なService Bus アプリケーションの作成の詳細に焦点を当てます。REST ベースのService Bus アプリケーションをホストするプロセスは、標準的なService Bus アプリケーションのホストとよく似ています。主な違いは、コントラクトと構成に関する部分です。実際のホスト プロセスは基本的に同じです。

REST 標準に準拠する Service Bus サービス アプリケーションをホストするには

  1. Service Bus 用のサービスの構築」で定義されている標準パターンを使用して、サービスを作成します。つまり、サービス コントラクトを定義して実装する、サービス ホストを構成して実装するなどです。

    1. OperationContractAttribute 属性をサービス コントラクトに適用するときは、REST ベースのメンバーが明らかになる適切な属性を適用してください。詳細については、次のトピックを参照してください。方法: 方法: Service Bus を通じて REST ベースの Web サービスを公開する」を参照してください。

      次のコード例は、インターフェイス メンバーに REST スタイルの GET メンバーとしてタグを設定する方法を示します。

      public interface IImageContract
      {
          [OperationContract, WebGet]
          Stream GetImage();
      }
      
    2. コントラクトを実装するときは、アプリケーションのニーズで定義されているように、発信 Web 応答に対して適切なコンテンツ タイプ ヘッダーを設定します。

      public ImageService() 
      {
          this.bitmap = Image.FromFile(imageFileName);
      }
      
      public Stream GetImage()
      {
          MemoryStream stream = new MemoryStream();
          this.bitmap.Save(stream, ImageFormat.Jpeg);
      
          stream.Position = 0;
          WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
      
          return stream;
      }        
      
      
      
  2. CreateServiceUri メソッドを使用して、サービスのアドレスを作成します。

    string serviceNamespace = “myServiceNamespace”
    Uri address = ServiceBusEnvironment.CreateServiceUri("https", serviceNamespace, "Image");
    
    
  3. WebServiceHost の新しいインスタンスを作成します。

    WebServiceHost host = new WebServiceHost(typeof(ImageService), address);
    

    WebServiceHost クラスは ServiceHost クラスから派生し、WCF の Web プログラミング モデルを補完します。また、REST ベースでのサービスのホストを容易にします。REST ベースでのService Bus アプリケーションの実装では、ServiceHost の代わりに WebServiceHost を使用することをお勧めします。詳細については、次のトピックを参照してください。 WCF ドキュメントの WCF REST プログラミング モデル

  4. サービス エンドポイントで使用されるアドレス、バインド、コントラクト ("ABC" とも呼びます) を指定します。

        <services>
          <!-- Application Service -->
          <service name="Microsoft.ServiceBus.Samples.ImageService"
                   behaviorConfiguration="default">
            <endpoint name="RelayEndpoint"
                      contract="Microsoft.ServiceBus.Samples.IImageContract"
                      binding="webHttpRelayBinding"
                      bindingConfiguration="default"
                      behaviorConfiguration="sharedSecretClientCredentials"
                      address="" />
        </service>
    

    ここでは、ABC は App.config ファイルのエンドポイントにリンクされています。アプリケーションの構成の詳細情報:、「Service Bus で登録する WCF サービスの構成」を参照してください。

    REST ベースのService Bus アプリケーションのサービス エンドポイントで使用するバインドは、WebHttpRelayBinding だけです。

  5. 必要に応じて、クライアントの認証を無効にします。

    
        <bindings>
          <!-- Application Binding -->
          <webHttpRelayBinding>
            <binding name="default">
                 <security relayClientAuthenticationType="None" />
            </binding>
          </webHttpRelayBinding>
        </bindings>
    
    

    既定では、WebHttpRelayBinding バインドにはクライアントの認証が必要です。この手順では、App.config ファイルの <binding> 要素でそれを無効にして、クライアントが (たとえば、ブラウザーを使用するときに) 資格情報を提示する必要がないようにする方法を説明します。Service Busでの認証の詳細情報:、「Service Bus 接続のセキュリティ保護と認証」を参照してください。

  6. アプリケーションのセキュリティを定義します。

    
        <behaviors>
          <endpointBehaviors>
            <behavior name="sharedSecretClientCredentials">
              <transportClientEndpointBehavior credentialType="SharedSecret">
                <clientCredentials>
                  <sharedSecret issuerName="ISSUER_NAME" issuerSecret="ISSUER_SECRET" />
                </clientCredentials>
              </transportClientEndpointBehavior>
    
        </behaviors>
    

    この例では、セキュリティは App.config ファイルで定義されています。セキュリティの詳細情報:、「Service Bus 接続のセキュリティ保護と認証」を参照してください。

  7. WebServiceHost.Open を呼び出してサービスを開きます。

    host.Open()
    
  8. 完了したら、WebServiceHost.Close でホストを閉じます。

    host.Close();
    

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました

コミュニティの追加

追加
表示:
© 2014 Microsoft. All rights reserved.