SQL Server による SignalR スケールアウトSignalR Scaleout with SQL Server

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

Warning

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

このトピックで使用されるソフトウェアのバージョンSoftware versions used in this topic

このトピックの以前のバージョンPrevious versions of this topic

SignalR の以前のバージョンについては、次を参照してください。以前のバージョンの SignalRします。For information about earlier versions of SignalR, see SignalR Older Versions.

意見やご質問Questions and comments

このチュートリアルの良い点に関するフィードバックや、ページ下部にあるコメントで改善できる点をお知らせください。Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. チュートリアルに直接関係のない質問がある場合は、ASP.NET SignalR フォーラムまたはStackOverflow.comにて投稿してください。If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

このチュートリアルでは、2 つの IIS インスタンスで配置されている SignalR アプリケーション間でメッセージを配布するのに SQL Server を使用します。In this tutorial, you will use SQL Server to distribute messages across a SignalR application that is deployed in two separate IIS instances. 1 つのテスト コンピューターで、このチュートリアルを実行することもできますが、完全な効果を取得するには SignalR アプリケーションを 2 つまたは複数のサーバーをデプロイする必要があります。You can also run this tutorial on a single test machine, but to get the full effect, you need to deploy the SignalR application to two or more servers. サーバーのいずれか、または別の専用サーバーでは、SQL Server をインストールすることもする必要があります。You must also install SQL Server on one of the servers, or on a separate dedicated server. 別のオプションでは、Azure で Vm を使用してチュートリアルを実行します。Another option is to run the tutorial using VMs on Azure.

必須コンポーネントPrerequisites

Microsoft SQL Server 2005 以降。Microsoft SQL Server 2005 or later. バック プレーンには、SQL Server のデスクトップとサーバーの両方のエディションがサポートされています。The backplane supports both desktop and server editions of SQL Server. SQL Server Compact Edition または Azure SQL Database はサポートされません。It does not support SQL Server Compact Edition or Azure SQL Database. (場合は、アプリケーションは、Azure でホストされる、Service Bus のバック プレーン代わりに、検討します。)(If your application is hosted on Azure, consider the Service Bus backplane instead.)

概要Overview

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

  1. 新しい空のデータベースを作成します。Create a new empty database. バック プレーンはこのデータベースに必要なテーブルを作成します。The backplane will create the necessary tables in this database.

  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 class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

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

データベースを構成します。Configure the Database

かどうか、アプリケーションが Windows 認証または SQL Server 認証に使用、データベースへのアクセスを決定します。Decide whether the application will use Windows authentication or SQL Server authentication to access the database. 関係なく、データベース ユーザーにログインし、スキーマを作成して、テーブルを作成するアクセス許可を確認します。Regardless, make sure the database user has permissions to log in, create schemas, and create tables.

使用するバック プレーンの新しいデータベースを作成します。Create a new database for the backplane to use. データベースに任意の名前を付けることができます。You can give the database any name. データベースでは、テーブルを作成する必要はありません。バック プレーンでは、必要なテーブルを作成します。You don't need to create any tables in the database; the backplane will create the necessary tables.

Service Broker を有効にします。Enable Service Broker

バック プレーンのデータベースの Service Broker を有効にすることをお勧めします。It is recommended to enable Service Broker for the backplane database. Service Broker では、メッセージングとバック プレーンのより効率的に更新プログラムを受信できるように SQL Server でのキューのネイティブ サポートを提供します。Service Broker provides native support for messaging and queuing in SQL Server, which lets the backplane receive updates more efficiently. (ただし、バック プレーンもさせずに Service Broker。)(However, the backplane also works without Service Broker.)

Service Broker が有効になっているかどうかを確認するには、クエリ、は_broker_有効になっている内の列、 sys.databasesカタログ ビューです。To check whether Service Broker is enabled, query the is_broker_enabled column in the sys.databases catalog view.

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Service Broker を有効にするには、次の SQL クエリを使用します。To enable Service Broker, use the following SQL query:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Note

このクエリは、デッドロックを確認が表示された場合、DB に接続されているアプリケーションはありません。If this query appears to deadlock, make sure there are no applications connected to the DB.

トレースを有効にした場合、トレースが表示されます Service Broker が有効になっているかどうか。If you have enabled tracing, the traces will also show whether Service Broker is enabled.

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

これらのチュートリアルのいずれかを次で SignalR アプリケーションを作成します。Create a SignalR application by following either of these tutorials:

次に、私たちと SQL Server のスケール アウトをサポートするために、チャット アプリケーションを変更します。Next, we'll modify the chat application to support scaleout with SQL Server. まず、SignalR.SqlServer NuGet パッケージをプロジェクトに追加します。First, add the SignalR.SqlServer NuGet package to your project. Visual Studio から、ツールメニューの NuGet パッケージ マネージャーを選択し、パッケージ マネージャー コンソールします。In Visual Studio, from the Tools menu, select NuGet Package Manager, then select Package Manager Console. パッケージ マネージャー コンソール ウィンドウで、次のコマンドを入力します。In the Package Manager Console window, enter the following command:

Install-Package Microsoft.AspNet.SignalR.SqlServer

次に、Startup.cs ファイルを開きます。Next, open the Startup.cs file. 次のコードを追加、構成メソッド。Add the following code to the Configure method:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

展開し、アプリケーションを実行Deploy and Run the Application

SignalR アプリケーションをデプロイするには、Windows Server インスタンスを準備します。Prepare your Windows Server instances to deploy the SignalR application.

IIS の役割を追加します。Add the IIS role. WebSocket プロトコルを含む、「アプリケーションの開発」機能が含まれます。Include "Application Development" features, including the WebSocket Protocol.

管理サービス ([管理ツール] の下に表示) とも含まれます。Also include the Management Service (listed under "Management Tools").

インストール Web Deploy 3.0 です。Install Web Deploy 3.0. IIS マネージャーを実行するとき、Microsoft Web プラットフォームをインストールするように求められますできますインストーラーをダウンロードします。When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. プラットフォーム インストーラーで Web Deploy を検索し、Web Deploy 3.0 をインストールIn the Platform Installer, search for Web Deploy and install Web Deploy 3.0

Web 管理サービスが実行されていることを確認します。Check that the Web Management Service is running. それ以外の場合は、サービスを開始します。If not, start the service. (Web 管理サービスで Windows サービスの一覧が表示されない場合は、IIS の役割を追加したときに、管理サービスがインストールされていることを確認)。(If you don't see Web Management Service in the list of Windows services, make sure that you installed the Management Service when you added the IIS role.)

最後に、tcp ポート 8172 を開きます。Finally, open port 8172 for TCP. これは、Web 配置ツールで使用されるポートです。This is the port that the Web Deploy tool uses.

サーバーに、開発コンピューターから Visual Studio プロジェクトを配置する準備が整いました。Now you are ready to deploy the Visual Studio project from your development machine to the server. ソリューション エクスプ ローラーでソリューションを右クリックし、をクリックして発行します。In Solution Explorer, right-click the solution and click Publish.

Web デプロイに関するドキュメントの詳細を参照してください。 for Visual Studio および ASP.NET の Web 配置コンテンツ マップします。For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

2 つのサーバー アプリケーションをデプロイする場合は、別のブラウザー ウィンドウで各インスタンスを開くし、もう一方の SignalR メッセージを受信互いを参照してください。If you deploy the application to two servers, you can open each instance in a separate browser window and see that they each receive SignalR messages from the other. (もちろん、実稼働環境で 2 つのサーバー放置ロード バランサーの背後にします。)(Of course, in a production environment, the two servers would sit behind a load balancer.)

アプリケーションを実行した後、SignalR がデータベース内でテーブルを作成が自動的にことが確認できます。After you run the application, you can see that SignalR has automatically created tables in the database:

SignalR は、テーブルを管理します。SignalR manages the tables. アプリケーションが展開されている限りしない行を削除、変更、テーブルのなど。As long as your application is deployed, don't delete rows, modify the table, and so forth.