クイック スタート:コンソール アプリからのリアルタイム メッセージのブロードキャスト
Azure SignalR Service は、ブロードキャストなどのサーバーからクライアントへの通信のシナリオをサポートする REST API を提供します。 REST API 呼び出しが可能なプログラミング言語のいずれかを選択できます。 接続されているすべてのクライアント、名前を指定したクライアント、またはクライアントのグループにメッセージを投稿することができます。
このクイックスタートでは、コマンドライン アプリから接続されたクライアント アプリに C# でメッセージを送信する方法について学習します。
重要
この記事に示す生の接続文字列は、デモンストレーションのみを目的としています。
接続文字列には、アプリケーションが Azure Web PubSub サービスにアクセスするために必要な認可情報が含まれています。 接続文字列内のアクセス キーは、サービスのルート パスワードに似ています。 運用環境では、常にアクセス キーを保護してください。 Azure Key Vault を使用してキーの管理とローテーションを安全に行い、Microsoft Entra ID を使用して接続文字列をセキュリティで保護し、Microsoft Entra ID を使用してアクセスを認可します。
アクセス キーを他のユーザーに配布したり、ハードコーディングしたり、他のユーザーがアクセスできるプレーンテキストで保存したりしないでください。 キーが侵害された可能性があると思われる場合は、キーをローテーションしてください。
前提条件
このクイック スタートは、macOS、Windows、または Linux で実行できます。
- .NET Core SDK
- 任意のテキスト エディターまたはコード エディター。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
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 リソース ページで、左側のメニューから、[設定] の下にある [キー] を選びます。
- 主キーの [接続文字列] をコピーします。 この接続文字列は、このチュートリアルで後ほどアプリを構成するために必要です。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
サンプル アプリケーションの複製
サービスがデプロイされている間に、コードを準備します。 最初に、GitHub からサンプル アプリをクローンします。 次に、SignalR Service の接続文字列をアプリに設定します。 最後に、ローカル環境でアプリケーションを実行します。
git ターミナル ウィンドウを開きます。 サンプル プロジェクトを複製するフォルダーに移動します。
次のコマンドを実行して、サンプル レポジトリを複製します。 このコマンドは、コンピューター上にサンプル アプリのコピーを作成します。
git clone https://github.com/aspnet/AzureSignalR-samples.git
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
サンプルのビルドと実行
このサンプルは、Azure SignalR サービスの使用方法を示すコンソール アプリです。 これには次の 2 つのモードがあります。
- サーバー モード: 単純なコマンドを使用して、Azure SignalR サービスの REST API を呼び出します。
- クライアント モード: Azure SignalR サービスに接続し、サーバーからメッセージを受信します。
また、Azure SignalR Service で認証するためのアクセス トークンを生成する方法も学習します。
実行可能ファイルの作成
例として MacOS の osx.10.13 x64 を使用します。 他のプラットフォームで作成する方法については、こちらを参照してください。
cd AzureSignalR-samples/samples/Serverless/
dotnet publish -c Release -r osx.10.13-x64
クライアントを起動する
この記事に示す生の接続文字列は、デモンストレーションのみを目的としています。 運用環境では、常にアクセス キーを保護してください。 Azure Key Vault を使用してキーの管理とローテーションを安全に行い、Microsoft Entra ID を使用して接続文字列をセキュリティで保護し、Microsoft Entra ID を使用してアクセスを認可します。
cd bin/Release/netcoreapp2.1/osx.10.13-x64/
Serverless client <ClientName> -c "<ConnectionString>" -h <HubName>
サーバーを起動する
cd bin/Release/netcoreapp2.1/osx.10.13-x64/
Serverless server -c "<ConnectionString>" -h <HubName>
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
公開せずにサンプルを実行する
次のコマンドを実行して、サーバーまたはクライアントを開始することもできます
# Start a server
dotnet run -- server -c "<ConnectionString>" -h <HubName>
# Start a client
dotnet run -- client <ClientName> -c "<ConnectionString>" -h <HubName>
user-secrets を使用して接続文字列を指定する
サンプルのルート ディレクトリでdotnet user-secrets set Azure:SignalR:ConnectionString "<ConnectionString>"
を実行することができます。 その後は、-c "<ConnectionString>"
オプションが不要になります。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
使用法
サーバーが起動した後、コマンドを使用してメッセージを送信します。
send user <User Id>
send users <User List>
send group <Group Name>
send groups <Group List>
broadcast
別のクライアント名を持つ複数のクライアントを開始できます。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
非 Microsoft サービスとの統合
Azure SignalR Service を使用すると、非 Microsoft サービスをシステムに統合することができます。
技術仕様の定義
以下の表は、現段階でサポートされている全バージョンの REST API を示したものです。 特定のバージョンごとの定義ファイルも記載しています。
Version | API 状態 | Door | 固有 |
---|---|---|---|
1.0-preview |
利用可能 | 5002 | Swagger |
1.0 |
利用可能 | Standard | Swagger |
以下に示したのは、特定のバージョンごとに利用可能な API の一覧です。
API | 1.0-preview | 1.0 |
---|---|---|
全員にブロードキャストする | ✓ | ✓ |
グループにブロードキャストする | ✓ | ✓ |
一部のグループにブロードキャストする | ✓ (非推奨) | N / A |
ユーザーに送信する | ✓ | ✓ |
一部のユーザーに送信する | ✓ (非推奨) | N / A |
ユーザーをグループに追加する | N / A |
✓ |
ユーザーをグループから削除する | N / A |
✓ |
ユーザーの存在を確認する | N / A |
✓ |
ユーザーをすべてのグループから削除する | N / A |
✓ |
接続に送信する | N / A |
✓ |
グループに接続を追加する | N / A |
✓ |
グループから接続を削除する | N / A |
✓ |
クライアント接続を閉じる | N / A |
✓ |
サービス正常性 | N / A |
✓ |
全員にブロードキャストする
Version | API HTTP メソッド | 要求 URL | 要求本文 |
---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name> |
{"target": "<method-name>", "arguments": [...]} |
グループにブロードキャストする
Version | API HTTP メソッド | 要求 URL | 要求本文 |
---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/group/<group-name> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name> |
{"target": "<method-name>", "arguments": [...]} |
ユーザーに送信する
Version | API HTTP メソッド | 要求 URL | 要求本文 |
---|---|---|---|
1.0-preview |
POST |
https://<instance-name>.service.signalr.net:5002/api/v1-preview/hub/<hub-name>/user/<user-id> |
{"target": "<method-name>", "arguments": [...]} |
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id> |
{"target": "<method-name>", "arguments": [...]} |
ユーザーをグループに追加する
Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
ユーザーをグループから削除する
Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
グループ内のユーザーの存在を確認する
API Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups/<group-name> |
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/users/<user-id> |
応答の状態コード | 説明 |
---|---|
200 |
ユーザーが存在します |
404 |
ユーザーが存在しません |
ユーザーをすべてのグループから削除する
API Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/users/<user-id>/groups |
接続にメッセージを送信する
API Version | API HTTP メソッド | 要求 URL | 要求本文 |
---|---|---|---|
1.0 |
POST |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> |
{ "target":"<method-name>", "arguments":[ ... ] } |
グループに接続を追加する
API Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id> |
1.0 |
PUT |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name> |
グループから接続を削除する
API Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/groups/<group-name>/connections/<connection-id> |
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>/groups/<group-name> |
クライアント接続を閉じる
API Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id> |
1.0 |
DELETE |
https://<instance-name>.service.signalr.net/api/v1/hubs/<hub-name>/connections/<connection-id>?reason=<close-reason> |
サービス正常性
API Version | API HTTP メソッド | 要求 URL |
---|---|---|
1.0 |
GET |
https://<instance-name>.service.signalr.net/api/v1/health |
応答の状態コード | 説明 |
---|---|
200 |
サービスは良好 |
5xx |
サービス エラー |
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
リソースをクリーンアップする
このアプリの使用を続けない場合は、次の手順に従って、このクイック スタートで作成したすべてのリソースを削除して、課金が発生しないようにします。
Azure Portal の左端で [リソース グループ] を選択し、作成したリソース グループを選択します。 検索ボックスを使用して名前でリソース グループを検索することもできます。
表示されたウィンドウでリソース グループを選択し、[リソース グループの削除] をクリックします。
新しいウィンドウで、削除するリソース グループの名前を入力し、[削除] をクリックします。
問題がある場合は、 トラブルシューティング ガイドをお試しになるか、ご連絡ください。
次のステップ
このクイック スタートでは、REST API を使用して SignalR Service からクライアントにリアルタイム メッセージをブロードキャストする方法を学習しました。 次は、REST API を基盤に構築されている SignalR Service バインディングを使用して Functions を開発およびデプロイする方法の詳細を学習してください。