SQL Server による SignalR スケールアウト (SignalR 1.x)

作成者: Patrick Fletcher

警告

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

このチュートリアルでは、SQL Serverを使用して、2 つの個別の IIS インスタンスにデプロイされた SignalR アプリケーション全体にメッセージを配布します。 このチュートリアルは 1 台のテスト コンピューターで実行することもできますが、完全な効果を得るには、SignalR アプリケーションを 2 つ以上のサーバーにデプロイする必要があります。 また、SQL Serverをいずれかのサーバーにインストールするか、別の専用サーバーにインストールする必要があります。 もう 1 つのオプションは、Azure 上の VM を使用してチュートリアルを実行することです。

S Q L サーバーの図と、VM、コンピューター、クエリの送信、および S Q L サーバーへの更新の間の関係。

必須コンポーネント

Microsoft SQL Server 2005 以降。 バックプレーンは、SQL Serverのデスクトップエディションとサーバーエディションの両方をサポートします。 SQL Server Compact Edition または Azure SQL Database はサポートされていません。 (アプリケーションが Azure でホストされている場合は、代わりに Service Bus バックプレーンを検討してください)。

概要

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

  1. 新しい空のデータベースを作成します。 バックプレーンによって、このデータベースに必要なテーブルが作成されます。

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

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

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

    protected void Application_Start()
    {
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

データベースの構成

アプリケーションでWindows 認証認証を使用するか、SQL Server認証を使用してデータベースにアクセスするかを決定します。 いずれの場合も、データベース ユーザーがログイン、スキーマの作成、およびテーブルの作成に対するアクセス許可を持っていることを確認してください。

バックプレーンで使用する新しいデータベースを作成します。 データベースには任意の名前を付けることができます。 データベースにテーブルを作成する必要はありません。バックプレーンによって必要なテーブルが作成されます。

[データベース] フォルダーが強調表示されている [オブジェクト エクスプローラー] ウィンドウのスクリーンショット。含まれているサブフォルダーが表示されています。

Service Broker を有効にする

バックプレーン データベースに対して Service Broker を有効にすることをお勧めします。 Service Broker は、SQL Serverでのメッセージングとキューのネイティブ サポートを提供します。これにより、バックプレーンは更新プログラムをより効率的に受信できます。 (ただし、バックプレーンは Service Broker なしでも機能します)。

Service Broker が有効になっているかどうかをチェックするには、sys.databases カタログ ビューの is_broker_enabled 列に対してクエリを実行します。

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

Service Broker に表示されている [S Q L クエリ 1 ドット][ S Q L] タブのスクリーンショット。[結果] タブと [メッセージ] タブが表示されています。

Service Broker を有効にするには、次の SQL クエリを使用します。

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Note

このクエリがデッドロックしているように見える場合は、DB に接続されているアプリケーションがないことを確認します。

トレースを有効にした場合、トレースには Service Broker が有効になっているかどうかも表示されます。

SignalR アプリケーションを作成する

次のいずれかのチュートリアルに従って SignalR アプリケーションを作成します。

次に、チャット アプリケーションを変更して、SQL Serverによるスケールアウトをサポートします。 まず、SignalR.SqlServer NuGet パッケージをプロジェクトに追加します。 Visual Studio の [ツール ] メニューから [ NuGet パッケージ マネージャー] を選択し、[ パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。

Install-Package Microsoft.AspNet.SignalR.SqlServer

次に、Global.asax ファイルを開きます。 Application_Start メソッドに次のコードを追加します。

protected void Application_Start()
{
    string sqlConnectionString = "<add your SQL connection string here>";
    GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);

    RouteTable.Routes.MapHubs();
}

アプリケーションのデプロイと実行

SignalR アプリケーションをデプロイするために Windows Server インスタンスを準備します。

IIS ロールを追加します。 WebSocket プロトコルを含む "アプリケーション開発" 機能を含めます。

[役割と機能の追加ウィザード] 画面のスクリーンショット。[サーバー ロール] オプションと [Web ソケット プロトコル] オプションが強調表示されています。

管理サービスも含めます ([管理ツール] の下に表示されます)。

[サーバーの役割] と [I S 管理スクリプトとツール] オプションが強調表示されている [役割と機能の追加ウィザード] 画面のスクリーンショット。

Web Deploy 3.0 をインストールします。 IIS マネージャーを実行すると、Microsoft Web Platformのインストールを求めるメッセージが表示されるか、インストーラーをダウンロードできます。 プラットフォーム インストーラーで、Web 配置を検索し、Web 配置 3.0 をインストールします

Web プラットフォーム インストーラー 4 ポイント 5 画面のスクリーンショット。Web 配置 3 ポイント 0 オプションが強調表示されている検索結果が表示されています。

Web 管理サービスが実行されていることを確認します。 そうでない場合は、サービスを開始します。 (Windows サービスの一覧に Web 管理サービスが表示されない場合は、IIS ロールを追加したときに管理サービスがインストールされていることを確認してください)。

最後に、TCP 用のポート 8172 を開きます。 これは、Web 配置ツールが使用するポートです。

これで、開発用コンピューターからサーバーに Visual Studio プロジェクトをデプロイする準備ができました。 ソリューション エクスプローラーで、ソリューションを右クリックし、[発行] をクリックします。

Web 配置の詳細なドキュメントについては、「 Visual Studio と ASP.NET 用の Web 配置コンテンツ マップ」を参照してください。

アプリケーションを 2 つのサーバーにデプロイする場合は、個別のブラウザー ウィンドウで各インスタンスを開き、それぞれがもう一方から SignalR メッセージを受信することを確認できます。 (もちろん、運用環境では、2 つのサーバーはロード バランサーの背後に置かれていたことになります)。

Signal R メッセージを表示する [インデックス] 画面を示すインターネット エクスプローラー ブラウザー ウィンドウのスクリーンショット。

アプリケーションを実行すると、SignalR によってデータベースにテーブルが自動的に作成されていることがわかります。

MIKE ダッシュ S Q L サーバーが強調表示され、含まれているフォルダーとサーバーが表示されているオブジェクト エクスプローラー画面のスクリーンショット。

SignalR はテーブルを管理します。 アプリケーションがデプロイされている限り、行を削除したり、テーブルを変更したりしないでください。