Azure Service Bus による SignalR スケールアウト (SignalR 1.x)

作成者: Patrick Fletcher

警告

このドキュメントは、SignalR の最新バージョン用ではありません。 SignalR の ASP.NET Coreを見てみましょう。

このチュートリアルでは、Service Bus バックプレーンを使用して各ロール インスタンスにメッセージを配布し、SignalR アプリケーションを Windows Azure Web ロールにデプロイします。

Service Bus 名前空間トピック、Web ロール、使用可能なコンピューターとアカウントの関係を示す図。

前提条件:

Service Bus バックプレーンは、 Windows Server バージョン 1.1 の Service Bus とも互換性があります。 ただし、Windows Server 用 Service Bus のバージョン 1.0 と互換性がありません。

価格

Service Bus バックプレーンは、トピックを使用してメッセージを送信します。 最新の価格情報については、「 Service Bus」を参照してください。 この執筆時点では、1 か月あたり 1,000,000 件のメッセージを 1 ドル未満で送信できます。 バックプレーンは、SignalR ハブ メソッドの呼び出しごとにサービス バス メッセージを送信します。 また、接続、切断、グループの参加または脱退などの制御メッセージもあります。 ほとんどのアプリケーションでは、メッセージ トラフィックの大部分はハブ メソッド呼び出しになります。

概要

詳細なチュートリアルに進む前に、以下に、実行する操作の概要を示します。

  1. Windows Azure portalを使用して、新しい Service Bus 名前空間を作成します。

  2. 次の NuGet パッケージをアプリケーションに追加します。

  3. SignalR アプリケーションを作成します。

  4. 次のコードを Global.asax に追加して、バックプレーンを構成します。

    protected void Application_Start()
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

アプリケーションごとに、"YourAppName" に異なる値を選択します。 複数のアプリケーションで同じ値を使用しないでください。

Azure サービスを作成する

「クラウド サービスを 作成してデプロイする方法」の説明に従って、クラウド サービスを作成します。 「方法: クイック作成を使用してクラウド サービスを作成する」セクションの手順に従います。 このチュートリアルでは、証明書をアップロードする必要はありません。

[新しい] ウィンドウのスクリーンショット。アプリケーションで [クラウド サービス] オプションとアイコンが強調表示され、赤い円が表示されています。

「Service Bus トピック/サブスクリプションの使用方法」の説明に従って、新しい Service Bus 名前空間を作成します。 「サービス名前空間の作成」セクションの手順に従います。

[名前空間名] フィールドと [リージョン] フィールドに入力されたエントリを含む [新しい名前空間の追加] 画面のスクリーンショット。

注意

クラウド サービスと Service Bus 名前空間に同じリージョンを選択してください。

Visual Studio プロジェクトを作成する

Visual Studio を起動します。 [ ファイル ] メニューの [ 新しいプロジェクト] をクリックします。

[ 新しいプロジェクト ] ダイアログ ボックスで、[ Visual C#] を展開します。 [ インストールされているテンプレート] で[ クラウド ] を選択し、[ Windows Azure Cloud Service] を選択します。 既定値.NET Framework 4.5 のままにします。 アプリケーションに ChatService という名前を付け、[OK] をクリック します

Windows Azure Cloud Service Visual C # オプションが強調表示されている [新しいプロジェクト] 画面のスクリーンショット。

[ 新しい Windows Azure Cloud Service ] ダイアログで、[MVC 4 Web ロール ASP.NET 選択します。 右矢印ボタン (>) をクリックして、ソリューションにロールを追加します。

新しいロールの上にマウス ポインターを置くと、鉛筆アイコンが表示されます。 ロールの名前を変更するには、このアイコンをクリックします。 ロールに"SignalRChat" という名前を付け、[OK] をクリック します

[Windows Azure クラウド サービス ソリューション] ウィンドウで [Signal R Chat] オプションが強調表示されている [新しい Windows Azure クラウド サービス] 画面のスクリーンショット。

[新しい ASP.NET MVC 4 プロジェクト] ウィザードで、[インターネット アプリケーション] を選択します。 [OK] をクリックします。 プロジェクト ウィザードでは、次の 2 つのプロジェクトが作成されます。

  • ChatService: このプロジェクトは Windows Azure アプリケーションです。 Azure ロールとその他の構成オプションを定義します。
  • SignalRChat: このプロジェクトは、ASP.NET MVC 4 プロジェクトです。

SignalR チャット アプリケーションを作成する

チャット アプリケーションを作成するには、SignalR と MVC 4 を使用したはじめにチュートリアルの手順に従います。

NuGet を使用して、必要なライブラリをインストールします。 [ツール] メニューの [NuGet パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] を選択します。 [ パッケージ マネージャー コンソール ] ウィンドウで、次のコマンドを入力します。

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

オプションを -ProjectName 使用して、Windows Azure プロジェクトではなく、ASP.NET MVC プロジェクトにパッケージをインストールします。

バックプレーンを設定する

アプリケーションの Global.asax ファイルに、次のコードを追加します。

protected void Application_Start()
{
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    RouteTable.Routes.MapHubs();
}

次に、Service Bus 接続文字列を取得する必要があります。 Azure portalで、作成した Service Bus 名前空間を選択し、[アクセス キー] アイコンをクリックします。

[作成] オプションにフォーカスがある Service Bus 名前空間の [作成]、[アクセス キー]、[削除] の各オプションとアイコンのスクリーンショット。

接続文字列をクリップボードにコピーし、 connectionString 変数に貼り付けます。

[名前空間へのアクセス キーの接続] 画面のスクリーンショット。[接続文字列]、[既定の発行者]、[既定のキー] フィールドが表示されています。

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

Azure にデプロイ

ソリューション エクスプローラーで、ChatService プロジェクト内の Roles フォルダーを展開します。

チャット サービス プロジェクトの [ロール] フォルダーに含まれている [Signal R Chat] オプションを示すソリューション エクスプローラー ツリーのスクリーンショット。

SignalRChat ロールを右クリックし、 [プロパティ] を選択します。 [ 構成 ] タブを選択します。[ インスタンス] で [2] を選択します。 VM のサイズを [Extra Small]\(特小\) に設定することもできます。

[構成] タブの [インスタンス] セクションのスクリーンショット。[インスタンス数] フィールドに 2 が入力され、[V M サイズ] フィールドが [Extra Small] に設定されています。

変更を保存します。

ソリューション エクスプローラーで、ChatService プロジェクトを右クリックします。 [発行] を選択します。

ソリューション エクスプローラー画面のチャット サービス プロジェクトのスクリーンショット。右クリック ドロップダウン メニューに [発行]が表示されています。オプション。

初めて Windows Azure に発行する場合は、資格情報をダウンロードする必要があります。 発行ウィザードで、[サインインして資格情報をダウンロードする] をクリックします。 これにより、Windows Azure portalにサインインし、発行設定ファイルをダウンロードするように求められます。

[Windows Azure アプリケーションの発行] 画面の [サインイン] タブのスクリーンショット。[サインインして資格情報をダウンロードする] リンクが強調表示されています。

[ インポート] をクリックし、ダウンロードした発行設定ファイルを選択します。

[次へ] をクリックします。 [ 発行設定] ダイアログの [ クラウド サービス] で、前に作成したクラウド サービスを選択します。

[Windows Azure アプリケーションの発行] 画面の [設定] タブのスクリーンショット。[共通設定] タブの [クラウド サービス] フィールドが表示されています。

[発行] をクリックします。 アプリケーションのデプロイと VM の起動には数分かかる場合があります。

ここで、チャット アプリケーションを実行すると、ロール インスタンスは Service Bus トピックを使用してAzure Service Busを介して通信します。 トピックは、複数のサブスクライバーを許可するメッセージ キューです。

バックプレーンによって、トピックとサブスクリプションが自動的に作成されます。 サブスクリプションとメッセージ アクティビティを表示するには、Azure portalを開き、Service Bus 名前空間を選択し、[トピック] をクリックします。

選択した [クラウド サービス] フィールドのスクリーンショットがAzure portalに設定され、[クラウド サービスの名前] フィールドが強調表示されています。

メッセージ アクティビティがダッシュボードに表示されるまで数分かかります。

メッセージ アクティビティ タイムラインを表示するAzure portal ダッシュボードのスクリーンショット。さまざまなメッセージ履歴を示す青と紫の線が表示されています。

SignalR は、トピックの有効期間を管理します。 アプリケーションがデプロイされている限り、トピックを手動で削除したり、トピックの設定を変更したりしないでください。