クイック スタート:ASP.NET と SignalR Service を使ってチャット ルームを作成する
Azure SignalR Service は SignalR for ASP.NET Core 2.1 に基づいており、ASP.NET SignalR との互換性は 100% ではありません。 Azure SignalR Service では、最新の ASP.NET Core テクノロジに基づいて、ASP.NET SignalR データ プロトコルが実装し直されました。 ASP.NET SignalR に対して Azure SignalR Service を使用する場合、ASP.NET SignalR の一部の機能はサポートされなくなっています。たとえば、クライアントが再接続したとき、Azure SignalR はメッセージを再生しません。 また、Forever Frame の転送や JSONP はサポートされていません。 ASP.NET SignalR アプリケーションを SignalR Service と共に使用するには、いくらかのコード変更や適切なバージョンの依存ライブラリが必要になります。
ASP.NET SignalR と ASP.NET Core SignalR の機能の比較の完全なリストについては、バージョンの違いに関するドキュメントを参照してください。
このクイックスタートでは、同じようなチャット ルーム アプリケーションで ASP.NET と Azure SignalR Service の使用を始める方法について説明します。
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
重要
この記事に示す生の接続文字列は、デモンストレーションのみを目的としています。
接続文字列には、アプリケーションが Azure Web PubSub サービスにアクセスするために必要な認可情報が含まれています。 接続文字列内のアクセス キーは、サービスのルート パスワードに似ています。 運用環境では、常にアクセス キーを保護してください。 Azure Key Vault を使用してキーの管理とローテーションを安全に行い、Microsoft Entra ID を使用して接続文字列をセキュリティで保護し、Microsoft Entra ID を使用してアクセスを認可します。
アクセス キーを他のユーザーに配布したり、ハードコーディングしたり、他のユーザーがアクセスできるプレーンテキストで保存したりしないでください。 キーが侵害された可能性があると思われる場合は、キーをローテーションしてください。
前提条件
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
Azure へのサインイン
Azure アカウントで Azure Portal にサインインします。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
このセクションでは、アプリに使う基本的な Azure SignalR インスタンスを作成します。 次の手順では、Azure portal を使って新しいインスタンスを作成しますが、Azure CLI を使うこともできます。 詳細については、Azure SignalR Service CLI リファレンスの az signalr create コマンドを参照してください。
- Azure portal にサインインします。
- ページの左上にある [+ リソースの作成] を選択します。
- [リソースの作成] ページで、[Search services and marketplace](サービスとマーケットプレースを検索) テキスト ボックスに「signalr」と入力し、リストから [SignalR Service] を選びます。
- [SignalR Service] ページで [作成] を選びます。
- [基本] タブで、新しい SignalR Service のインスタンスに必要な情報を入力します。 次の値を入力します。
フィールド | 推奨値 | 説明 |
---|---|---|
サブスクリプション | サブスクリプションの選択 | 新しい SignalR Service インスタンスを作成するために使うサブスクリプションを選びます。 |
リソース グループ | SignalRTestResources というリソース グループを作成する | SignalR リソースのリソース グループを選択または作成します。 既存のリソース グループを使う代わりに、このチュートリアルのために新しいリソース グループを作成すると便利です。 チュートリアルの終了後にリソースを解放するには、リソース グループを削除します。 リソース グループを削除すると、そのグループに所属するすべてのリソースも削除されます。 この削除操作は元に戻すことができません。 保存するリソースが含まれていないことを確認してから、リソース グループを削除してください。 詳細については、 リソース グループを使用した Azure リソースの管理に関するページを参照してください。 |
リソース名 | testsignalr | SignalR リソースに使用する一意のリソース名を入力します。 testsignalr がお使いのリージョンに既に導入されている場合は、数字や文字を追加して名前が一意になるようにします。 名前は 1 ~ 63 文字の文字列で、数字、英字、ハイフン ( - ) 文字のみを使用する必要があります。 名前の先頭と末尾にはハイフン文字を使用できません。また、連続するハイフン文字は無効です。 |
[リージョン] | 自分のリージョンを選択します | 新しい SignalR Service インスタンスに適切なリージョンを選びます。 Azure SignalR Service は、現在すべてのリージョンで使用できるわけではありません。 詳細については、Azure SignalR Service リージョンの可用性に関するページを参照してください |
価格レベル | [変更] を選び、[Free (Dev/Test Only)](無料 (Dev/Test のみ)) を選びます。 [選択] を選び、価格レベルを確認します。 | Azure SignalR Service には、Free、Standard、Premium という 3 つの価格レベルがあります。 チュートリアルでは、前提条件で特に明記されない限り、[Free] レベルを使います。 レベルと価格による機能の違いの詳細については、「Azure SignalR Service の価格」を参照してください |
サービス モード | 適切なサービス モードを選びます | Web アプリで SignalR のハブ ロジックをホストしていて、SignalR Service をプロキシとして使う場合は、[既定] を使います。 Azure Functions などのサーバーレス テクノロジを使って SignalR のハブ ロジックをホストする場合は、[サーバーレス] を使います。 [クラシック] モードは下位互換性のためだけにあり、使わないことをお勧めします。 詳細については、「Azure SignalR Service のサービス モード」を参照してください。 |
SignalR チュートリアルでは、[ネットワーク] と [タグ] タブの設定を変更する必要はありません。
- [基本] タブの下部にある [確認と作成] ボタンを選びます。
- [確認と作成] タブで、値を確認し [作成] を選びます。 デプロイが完了するまでしばらくかかります。
- デプロイが完了したら、[リソースに移動] ボタンを選びます。
- SignalR リソース ページで、左側のメニューから、[設定] の下にある [キー] を選びます。
- 主キーの [接続文字列] をコピーします。 この接続文字列は、このチュートリアルで後ほどアプリを構成するために必要です。
"サーバーレス" モードは、ASP.NET SignalR アプリケーションではサポートされていません。 Azure SignalR Service インスタンスの場合、必ず Default または Classic を使用してください。
「SignalR Service の作成」にあるスクリプトを使用して、このクイック スタートで使用されている Azure リソースを作成することもできます。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
サンプル アプリケーションの複製
サービスのデプロイ中、コードでの作業に切り替えましょう。 GitHub からサンプル アプリを複製し、SignalR Service 接続文字列を設定し、アプリケーションをローカルで実行します。
git ターミナル ウィンドウを開きます。 サンプル プロジェクトを複製するフォルダーに移動します。
次のコマンドを実行して、サンプル レポジトリを複製します。 このコマンドは、コンピューター上にサンプル アプリのコピーを作成します。
git clone https://github.com/aspnet/AzureSignalR-samples.git
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
チャット ルーム Web アプリの構成と実行
Visual Studio を起動し、複製したリポジトリの aspnet-samples/ChatRoom/ フォルダーにあるソリューションを開きます。
Azure portal を開いたブラウザーで、作成したインスタンスを探して選択します。
[Key](キー) を選択し、SignalR Service インスタンスの接続文字列を表示します。
プライマリ接続文字列を選択してコピーします。
web.config ファイルで接続文字列を設定します。
この記事では、デモ目的でのみ生の接続文字列が表示されます。 運用環境では、常にアクセス キーを保護してください。 Azure Key Vault を使用してキーの管理とローテーションを安全に行い、Microsoft Entra ID を使用して接続文字列をセキュリティで保護し、Microsoft Entra ID を使用してアクセスを認可します。
<configuration> <connectionStrings> <add name="Azure:SignalR:ConnectionString" connectionString="<Replace By Your Connection String>"/> </connectionStrings> ... </configuration>
Startup.cs で、
MapSignalR()
を呼び出す代わりにMapAzureSignalR({YourApplicationName})
を呼び出して接続文字列に渡し、アプリケーション自身が SignalR をホストするのではなく、サービスに接続するようにします。{YourApplicationName}
を自分のアプリケーションの名前と置き換えます。 この名前は、このアプリケーションを他のアプリケーションから区別するための一意の名前です。 値としてthis.GetType().FullName
を使用することができます。public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here app.MapAzureSignalR(this.GetType().FullName); }
これらの API を使用する前にサービス SDK を参照する必要もあります。 [ツール]、[NuGet パッケージ マネージャー]、[パッケージ マネージャー コンソール] を開き、コマンドを実行します。
Install-Package Microsoft.Azure.SignalR.AspNet
これらの変更以外はすべてのそのままで、使い慣れたハブ インターフェイスを引き続き使用してビジネス ロジックを作成することができます。
Note
この実装では、エンドポイント
/signalr/negotiate
が Azure SignalR Service SDK によるネゴシエーションに対して公開されます。 クライアントが接続を試行すると特別なネゴシエーション応答が返され、クライアントは接続文字列で定義されたサービス エンドポイントにリダイレクトされます。F5 を押し、プロジェクトをデバッグ モードで実行します。 アプリケーションがローカルで実行されます。 アプリケーションそのものが SignalR ランタイムをホストする代わりに、Azure SignalR Service に接続するようになります。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
リソースをクリーンアップする
このアプリの使用を続けない場合は、次の手順に従って、このクイック スタートで作成したすべてのリソースを削除して、課金が発生しないようにします。
Azure Portal の左端で [リソース グループ] を選択し、作成したリソース グループを選択します。 検索ボックスを使用して名前でリソース グループを検索することもできます。
表示されたウィンドウでリソース グループを選択し、[リソース グループの削除] をクリックします。
新しいウィンドウで、削除するリソース グループの名前を入力し、[削除] をクリックします。
重要
いったん削除したリソース グループを元に戻すことはできません。リソース グループとそこに存在するすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 このサンプルのホストとなるリソースを、保持するリソースが含まれている既存のリソース グループ内に作成した場合は、リソース グループを削除するのではなく、個々のブレードから各リソースを個別に削除することができます。
Azure portal にサインインし、 [リソース グループ] を選択します。
[名前でフィルター] ボックスにリソース グループの名前を入力します。 このクイックスタートの手順では、SignalRTestResources という名前のリソース グループを使用しました。 結果一覧でリソース グループの [...] をクリックし、 [リソース グループの削除] をクリックします。
しばらくすると、リソース グループとそこに含まれているすべてのリソースが削除されます。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
次のステップ
このクイック スタートでは、新しい Azure SignalR Service リソースを作成して、ASP.NET Web アプリと共に使用しました。 次に、Azure SignalR Service を ASP.NET Core と共に使用して、リアルタイム アプリケーションを開発する方法について学びます。