.NET 用 Azure WebJobs SignalR Service クライアント ライブラリ - バージョン 1.11.2
この拡張機能は、Azure 関数からAzure SignalR Serviceにアクセスするための機能を提供します。
作業の開始
パッケージをインストールする
NuGet を使用してSignalR Service クライアントをインストールします。
dotnet add package Microsoft.Azure.WebJobs.Extensions.SignalRService
前提条件
Azure サブスクリプション:Azure SignalR Serviceを含む Azure サービスを使用するには、サブスクリプションが必要です。 既存の Azure アカウントをお持ちでない場合は、無料試用版にサインアップするか、アカウントの作成時に Visual Studio サブスクリプション特典を使用できます。
Azure SignalR リソース:クライアント ライブラリSignalR Service使用するには、Azure SignalR リソースも必要です。 Azure リソースの作成に慣れていない場合は、Azure portalを使用して SignalR リソースを作成するためのステップバイステップ ガイドに従ってください。 また、Azure CLI、Azure PowerShell、または Azure Resource Manager (ARM) テンプレートを使用して SignalR リソースを作成するための詳細な手順も確認できます。
Azure で必要な SignalR リソースをすばやく作成し、その接続文字列を受け取るために、次をクリックしてサンプル テンプレートをデプロイできます。
インスタンスがデプロイされたら、ポータルで開き、その [設定] ページを見つけます。 [サービス モード] 設定を [サーバーレス] に変更します。
クライアントを認証する
クライアントSignalR Service SignalR リソースにアクセスするには、クライアントで認証する方法を理解する必要があります。 これを行う最も簡単な方法は、Azure Portal または以下の Azure CLI / Azure PowerShell スニペットを使用して、接続文字列を使用することです。
Azure CLI スニペット:
az signalr key list -n <your-resource-name> -g <your-resource-group-name> --query primaryKey -o tsv
Azure PowerShell スニペット:
Get-AzSignalRKey -ResourceGroupName <your-resource-name> -Name <your-resource-name>
ConnectionStringSetting
SignalR バインディングの プロパティ (SignalRAttribute
、SignalRConnectionInfoAttribute
SignalRTriggerAttribute
、など) は、接続文字列を格納する構成プロパティを指定するために使用されます。 指定しない場合、プロパティ AzureSignalRConnectionString
には接続文字列が含まれている必要があります。
ローカル開発の場合は、 ファイルを local.settings.json
使用して接続文字列を格納します。
{
"Values": {
"<connection_name>": "<connection-string>"
}
}
デプロイ時に、 アプリケーション設定 を使用して接続文字列を設定します。
主要な概念
SignalR Service クライアントと SignalR クライアント
SignalR Service クライアント: このライブラリを意味します。 これは、 SignalR サーバー の機能をサーバーレス スタイルで提供します。
SignalR クライアント: SignalR サーバーとは逆の概念。 詳細については、「ASP.NET Core SignalR クライアント」を参照してください。
SignalR 接続情報入力バインド
SignalRConnectionInfo
入力バインディングを使用すると、SignalR クライアントがAzure SignalR Serviceへの接続を開始するために必要なトークンを簡単に生成できます。
SignalR 接続情報の入力バインドの詳細については、Azure SignalR 接続情報の入力バインドに関するチュートリアルに従ってください。
SignalR 出力バインド
SignalR
出力バインドでは、 が許可されます。
- は、すべての接続、接続、ユーザー、グループにメッセージを送信します。
- グループ内の接続/ユーザーを追加/削除します。
SignalR 出力バインドの詳細については、Azure SignalR 出力バインドに従ってください。
SignalR トリガー
SignalR トリガーを使用すると、メッセージが Azure SignalR Service に送信されたときに関数を実行できます。
SignalR トリガーの詳細については、 Azure SignalR トリガー に従ってください。
サポートされるシナリオ
- SignalR クライアントのネゴシエート。
- グループ内の単一のユーザー/接続を追加/削除するなどのグループを管理します。
- 1 人のユーザー/接続、グループ、すべてのユーザー/接続にメッセージを送信します。
- Azure Functionsの回復性とディザスター リカバリーには、複数のAzure SignalR Service インスタンスを使用します。 詳細については、「Azure Functions での複数のAzure SignalR Service インスタンスのサポート」を参照してください。
例
SignalR クライアントのネゴシエーション
クライアントが SignalR に接続するには、SignalR クライアント ハブの URL とアクセス トークンを取得する必要があります。 プロセスを "ネゴシエーション" と呼びます。
[FunctionName("Negotiate")]
public static SignalRConnectionInfo Negotiate(
[HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req,
[SignalRConnectionInfo(HubName = "<hub_name>", UserId = "<user_id>")] SignalRConnectionInfo connectionInfo)
{
return connectionInfo;
}
個々のメッセージをブロードキャストする
1 つの Azure 関数呼び出しからハブ内のすべての接続にメッセージをブロードキャストするには、 属性を SignalR
関数の戻り値に適用できます。 戻り値は 型 SignalRMessage
である必要があります。
[FunctionName("sendOneMessageWithReturnValueBinding")]
[return: SignalR(HubName = "<hub_name>")]
public static SignalRMessage SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
return new SignalRMessage
{
Target = "<target>",
Arguments = new[] { "<here_can_be_multiple_objects>" }
};
}
型SignalRMessage
のパラメーターをout
使用することもできます。
[FunctionName("messages")]
public static void SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req, [SignalR(HubName = "<hub_name>")] out SignalRMessage message)
{
message = new SignalRMessage
{
Target = "<target>",
Arguments = new[] { "<here_can_be_multiple_objects>" }
};
}
複数のメッセージをブロードキャストする
1 つの Azure 関数呼び出しからハブ内のすべての接続に複数のメッセージをブロードキャストするには、 IAsyncCollector<SignalRMessage>
属性を SignalR
パラメーターに適用できます。
[FunctionName("messages")]
public static Task SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[SignalR(HubName = "<hub_name>")] IAsyncCollector<SignalRMessage> signalRMessages)
{
return signalRMessages.AddAsync(
new SignalRMessage
{
Target = "<target>",
Arguments = new[] { "<here_can_be_multiple_objects>" }
});
}
接続、ユーザー、またはグループへのメッセージの送信
接続、ユーザー、またはグループにメッセージを送信する場合、関数は 上記のメッセージのブロードキャストと似ていますが、 のプロパティSignalRMessage
で を指定ConnectionId
UserId
するGroupName
点が除きます。
戻り値バインディングを使用してユーザーにメッセージを送信する例を次に示します。
[FunctionName("messages")]
[return: SignalR(HubName = "<hub_name>")]
public static SignalRMessage SendMessageToUser(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req)
{
return new SignalRMessage
{
UserId = "<user_id>",
Target = "<target>",
Arguments = new[] { "<here_can_be_multiple_objects>" }
};
}
SignalR クライアント接続トリガー
SignalR クライアントが接続または切断されたときに関数をトリガーするには、 属性を SignalRTrigger
パラメーターに InvocationContext
適用します。
SignalR クライアントが接続されているときに接続 ID をログに記録する例を次に示します。 コンストラクターの 2 番目の SignalRTrigger
パラメーターが であることを connections
確認します。これは、トリガーのカテゴリを表す接続です。 3 番目の
[FunctionName("SignalRTest")]
public static void Run([SignalRTrigger("<hubName>", "connections", "connected")] InvocationContext invocationContext, ILogger logger)
{
logger.LogInformation($"{invocationContext.ConnectionId} was connected.");
}
SignalR クライアント メッセージ トリガー
SignalR クライアントがメッセージを送信するときに関数をトリガーするには、 属性を SignalRTrigger
パラメーターに InvocationContext
適用し、メッセージ内のパラメーター名と一致する名前を持つ各パラメーターに 属性を適用 SignalRParameter
します。
SignalR クライアントがターゲット "SendMessage" を含むメッセージを送信するときに、メッセージの内容をログに記録する例を次に示します。
[FunctionName("SignalRTest")]
public static void Run([SignalRTrigger("SignalRTest", "messages", "SendMessage")] InvocationContext invocationContext, [SignalRParameter] string message, ILogger logger)
{
logger.LogInformation($"Receive {message} from {invocationContext.ConnectionId}.");
}
トラブルシューティング
- 関数のトラブルシューティングガイダンスについては、「Azure Functionsの監視」を参照してください。
- Azure SignalR Service のトラブルシューティング ガイド
次のステップ
Azure Functionsの概要または Azure 関数の作成に関するガイドを参照してください
共同作成
このライブラリのビルド、テスト、および投稿の詳細については、 CONTRIBUTING.md を参照してください。
このプロジェクトでは、共同作成と提案を歓迎しています。 ほとんどの共同作成では、共同作成者使用許諾契約書 (CLA) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、「 cla.microsoft.com」を参照してください。
このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳しくは、「Code of Conduct FAQ (倫理規定についてよくある質問)」を参照するか、opencode@microsoft.com 宛てに質問またはコメントをお送りください。