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

作成者: Patrick Fletcher

警告

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

このトピックで使用するソフトウェアのバージョン

このトピックの以前のバージョン

SignalR の以前のバージョンの詳細については、「 SignalR の古いバージョン」を参照してください。

質問とコメント

このチュートリアルを気に入った方法と、ページの下部にあるコメントで改善できる内容に関するフィードバックをお寄せください。 チュートリアルに直接関連していない質問がある場合は、 ASP.NET SignalR フォーラム または StackOverflow.com に投稿できます。

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

S Q L サーバーから VM からコンピューターに向かう矢印を示す図。[Update]\(更新\) というラベルの付いた 1 つの矢印は、V M から始まり、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. バックプレーンを構成するには、Startup.cs に次のコードを追加します。

    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 の既定値を使用してバックプレーンを構成します。 これらの値の変更については、「 SignalR パフォーマンス: スケールアウト メトリック」を参照してください。

データベースを構成する

アプリケーションがデータベースにアクセスするために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]

sys dot databases カタログ ビューが表示されているウィンドウのスクリーンショット。

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

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

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();
    }
}

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

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

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

[役割と機能の追加ウィザード] ダイアログ ボックスを示すスクリーンショット。[サーバー ロール] と [WebSocket プロトコル] が選択されています。

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

[役割と機能の追加ウィザード] ダイアログ ボックスを示すスクリーンショット。[サーバーの役割と管理サービス] が選択されています。

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

検索結果で Web デプロイ 3 ポイント 0 が選択されているスクリーンショット。

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

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

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

Web 配置の詳細なドキュメントについては、「 Web Deployment Content Map for Visual Studio and ASP.NET」を参照してください。

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

2 つのサーバーにデプロイされたアプリケーションを示す 2 つのブラウザー ウィンドウが開いているスクリーンショット。

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

フォルダーとファイルを表示する [オブジェクト エクスプローラー] ダイアログ ボックスのスクリーンショット。

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