Azure Service Bus による SignalR スケールアウトSignalR Scaleout with Azure Service Bus

によってMike WassonPatrick Fletcherby Mike Wasson, Patrick Fletcher


このドキュメントは SignalR の最新バージョンはありません。This documentation isn't for the latest version of SignalR. 見てASP.NET Core SignalRします。Take a look at ASP.NET Core SignalR.

このチュートリアルでは、Service Bus のバック プレーンを使用して各ロール インスタンスにメッセージを配信する、Windows Azure の Web ロールに SignalR アプリケーションを展開します。In this tutorial, you will deploy a SignalR application to a Windows Azure Web Role, using the Service Bus backplane to distribute messages to each role instance. (Service Bus のバック プレーンとを使用することもできますweb アプリを Azure App Service で。)。(You can also use the Service Bus backplane with web apps in Azure App Service.)


  • Windows Azure アカウント。A Windows Azure account.
  • Windows Azure SDKします。The Windows Azure SDK.
  • Visual Studio 2012 または 2013。Visual Studio 2012 or 2013.

Service bus のバック プレーンと互換性のあるもService Bus for Windows Server、バージョン 1.1。The service bus backplane is also compatible with Service Bus for Windows Server, version 1.1. ただし、Service Bus for Windows Server のバージョン 1.0 と互換性がありません。However, it is not compatible with version 1.0 of Service Bus for Windows Server.


Service Bus のバック プレーンでは、トピックを使用して、メッセージを送信します。The Service Bus backplane uses topics to send messages. 最新の価格情報については、次を参照してください。 Service Busします。For the latest pricing information, see Service Bus. この記事の執筆時に、1 ドル未満の 1 か月あたり 1,000,000 メッセージを送信できます。At the time of this writing, you can send 1,000,000 messages per month for less than $1. バック プレーンでは、SignalR のハブ メソッドの呼び出しごとの service bus メッセージを送信します。The backplane sends a service bus message for each invocation of a SignalR hub method. 接続の切断、結合またはしたまま、やグループなどの一部のコントロール メッセージもあります。There are also some control messages for connections, disconnections, joining or leaving groups, and so forth. ほとんどのアプリケーションでは、メッセージ トラフィックの大部分のハブ メソッド呼び出しとなります。In most applications, the majority of the message traffic will be hub method invocations.


詳細なチュートリアルを始める前に、作業内容の簡単な概要を示します。Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Windows Azure ポータルを使用すると、新しい Service Bus 名前空間を作成できます。Use the Windows Azure portal to create a new Service Bus namespace.

  2. これらの NuGet パッケージをアプリケーションに追加します。Add these NuGet packages to your application:

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

  4. Startup.cs バック プレーンを構成するには、次のコードを追加します。Add the following code to Startup.cs to configure the backplane:

    public void Configuration(IAppBuilder app)
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
        // ...

このコードでは、バック プレーンを構成の既定値を持つTopicCountMaxQueueLengthします。This code configures the backplane with the default values for TopicCount and MaxQueueLength. これらの値を変更する方法については、次を参照してください。 SignalR パフォーマンス。スケール アウト メトリックします。For information on changing these values, see SignalR Performance: Scaleout Metrics.

各アプリケーションでは、"YourAppName"を別の値を選択します。For each application, pick a different value for "YourAppName". 複数のアプリケーションでは、同じ値を使用しません。Do not use the same value across multiple applications.

Azure サービスを作成します。Create the Azure Services

クラウド サービスを作成する」の説明に従ってを作成して、クラウド サービスをデプロイする方法します。Create a Cloud Service, as described in How to Create and Deploy a Cloud Service. セクションの手順に従って"する方法。"簡易作成によるクラウド サービスを作成します。Follow the steps in the section "How to: Create a cloud service using Quick Create". このチュートリアルでは、証明書をアップロードする必要はありません。For this tutorial, you do not need to upload a certificate.

新しい Service Bus 名前空間を作成する」の説明に従って方法を使用して Service Bus トピック/サブスクリプションします。Create a new Service Bus namespace, as described in How to Use Service Bus Topics/Subscriptions. 「Service Namespace を作成する」セクションの手順をに従います。Follow the steps in the section "Create a Service Namespace".


クラウド サービスと Service Bus 名前空間の同じリージョンを選択してください。Make sure to select the same region for the cloud service and the Service Bus namespace.

Visual Studio プロジェクトを作成します。Create the Visual Studio Project

Visual Studio を起動します。Start Visual Studio. ファイル メニューから新しいプロジェクトをクリックします。From the File menu, click New Project.

新しいプロジェクト ダイアログ ボックスで、展開Visual c# します。In the New Project dialog box, expand Visual C#. インストールされたテンプレートを選択しますクラウド選びWindows Azure クラウド サービスします。Under Installed Templates, select Cloud and then select Windows Azure Cloud Service. 既定値を .NET Framework 4.5 を保持します。Keep the default .NET Framework 4.5. ChatService アプリケーションの名前を指定し、をクリックしてOKします。Name the application ChatService and click OK.

新しい Windows Azure クラウド サービスダイアログ ボックスで、ASP.NET Web ロールを選択します。In the New Windows Azure Cloud Service dialog, select ASP.NET Web Role. 右矢印ボタンをクリックします (>)、ロールをソリューションに追加します。Click the right-arrow button (>) to add the role to your solution.

マウスので、新しいロールでは、ポインターを置き、鉛筆アイコンが表示されます。Hover the mouse over the new role, so the pencil icon visible. ロールの名前を変更するには、このアイコンをクリックします。Click this icon to rename the role. ロール"SignalRChat"という名前にしてOKします。Name the role "SignalRChat" and click OK.

新しい ASP.NET プロジェクトダイアログ ボックスで、 MVC、[ok] をクリックします。In the New ASP.NET Project dialog, select MVC, and click OK.

プロジェクト ウィザードには、2 つのプロジェクトが作成されます。The project wizard creates two projects:

  • ChatService:このプロジェクトは、Windows Azure アプリケーションです。ChatService: This project is the Windows Azure application. Azure のロールとその他の構成オプションを定義します。It defines the Azure roles and other configuration options.
  • SignalRChat:このプロジェクトは、ASP.NET MVC 5 プロジェクトです。SignalRChat: This project is your ASP.NET MVC 5 project.

SignalR チャット アプリケーションを作成します。Create the SignalR Chat Application

チャット アプリケーションを作成するには、チュートリアルの手順をに従ってSignalR と MVC 5 の概要します。To create the chat application, follow the steps in the tutorial Getting Started with SignalR and MVC 5.

必要なライブラリをインストールするのにには、NuGet を使用します。Use NuGet to install the required libraries. ツールメニューの NuGet パッケージ マネージャーを選択し、パッケージ マネージャー コンソールします。From the Tools menu, select NuGet Package Manager, then select Package Manager Console. パッケージ マネージャー コンソールウィンドウで、次のコマンドを入力します。In the Package Manager Console window, enter the following commands:

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

使用して、 -ProjectName Windows Azure プロジェクトではなく、ASP.NET MVC プロジェクトにパッケージをインストールするオプション。Use the -ProjectName option to install the packages to the ASP.NET MVC project, rather than the Windows Azure project.

バック プレーンを構成します。Configure the Backplane

アプリケーションの Startup.cs ファイルでは、次のコードを追加します。In your application's Startup.cs file, add the following code:

public void Configuration(IAppBuilder app)
    // Any connection or hub wire up and configuration should go here
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  


Service bus の接続文字列を取得する必要があります。Now you need to get your service bus connection string. Azure portal で作成した service bus 名前空間を選択し、アクセス キー アイコンをクリックします。In the Azure portal, select the service bus namespace that you created and click the Access Key icon.

接続文字列をクリップボードにコピーして貼り付けます、 connectionString変数。Copy the connection string to the clipboard, then paste it into the connectionString variable.

string connectionString = "Endpoint=sb://;

Azure に配置するDeploy to Azure

ソリューション エクスプ ローラーで、ロールChatService プロジェクト内のフォルダー。In Solution Explorer, expand the Roles folder inside the ChatService project.

SignalRChat ロールを右クリックしてプロパティします。Right-click the SignalRChat role and select Properties. [構成] タブを選択します。インスタンス2 を選択します。Select the Configuration tab. Under Instances select 2. VM のサイズを設定することもできます。極小します。You can also set the VM size to Extra Small.

変更を保存します。Save the changes.

ソリューション エクスプ ローラーで、ChatService プロジェクトを右クリックします。In Solution Explorer, right-click the ChatService project. [発行] を選びます。Select Publish.

Windows Azure に最初に公開する場合は、資格情報をダウンロードする必要があります。If this is your first time publishing to Windows Azure, you must download your credentials. 発行ウィザード、[資格情報のダウンロードにサインイン] をクリックします。In the Publish wizard, click "Sign in to download credentials". これは、操作によって、Windows Azure ポータルにサインインし、発行設定ファイルをダウンロードするように求められます。This will prompt you to sign into the Windows Azure portal and download a publish settings file.

クリックしてインポートダウンロードした発行設定ファイルを選択します。Click Import and select the publish settings file that you downloaded.

[次へ] をクリックします。Click Next. 発行設定ダイアログで、クラウド サービス、先ほど作成したクラウド サービスを選択します。In the Publish Settings dialog, under Cloud Service, select the cloud service that you created earlier.

[発行] をクリックします。Click Publish. アプリケーションを展開し、Vm を起動するまで数分かかることができます。It can take a few minutes to deploy the application and start the VMs.

今すぐチャット アプリケーションを実行するときに、ロール インスタンスは、Service Bus トピックを使用して、Azure Service Bus を介して通信します。Now when you run the chat application, the role instances communicate through Azure Service Bus, using a Service Bus topic. トピックは、複数のサブスクライバーを許可するメッセージ キューです。A topic is a message queue that allows multiple subscribers.

バック プレーンは、トピックおよびサブスクリプションに自動的に作成されます。The backplane automatically creates the topic and the subscriptions. サブスクリプションとメッセージ アクティビティを表示するには、Azure portal を開き、Service Bus 名前空間を選択して「トピック」をクリックします。To see the subscriptions and message activity, open the Azure portal, select the Service Bus namespace, and click on "Topics".

メッセージ アクティビティのダッシュ ボードに表示するまで数分かかることです。It make take a few minutes for the message activity to show up in the dashboard.

SignalR では、トピックの「有効期間を管理します。SignalR manages the topic lifetime. アプリケーションが展開されている限りは、トピックの設定を手動でのトピックを削除または変更しないでいます。As long as your application is deployed, don't try to manually delete topics or change settings on the topic.


System.InvalidOperationException「唯一サポートされている IsolationLevel が 'IsolationLevel.Serializable'.」System.InvalidOperationException "The only supported IsolationLevel is 'IsolationLevel.Serializable'."

このエラーは、操作のトランザクション レベルが以外のものに設定されている場合に発生する可能性がSerializableします。This error can occur if the transaction level for an operation is set to something other than Serializable. 他のトランザクション レベルで操作が実行されるしないことを確認します。Verify that no operations are being performed with other transaction levels.