Azure Functions における SignalR Service の出力バインド

SignalR 出力バインドを使用して、Azure SignalR Service で 1 つ以上のメッセージを送信します。 次の宛先にメッセージをブロードキャストできます。

  • 接続されているすべてのクライアント
  • 特定のユーザーに対して認証された接続されているクライアント

出力バインドでは、グループを管理することもできます。

セットアップと構成の詳細については、概要に関するページをご覧ください。

すべてのクライアントにブロードキャストする

次の例は、出力バインドを使用してすべての接続済みクライアントにメッセージを送信する関数を示しています。 target は、各クライアントで呼び出されるメソッドの名前です。 引数 プロパティは、クライアント メソッドに渡される 0 個以上のオブジェクトの配列です。

[FunctionName("SendMessage")]
public static Task SendMessage(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]object message, 
    [SignalR(HubName = "chat")]IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
        new SignalRMessage 
        {
            Target = "newMessage", 
            Arguments = new [] { message } 
        });
}

ユーザーに送信する

ユーザーに対して認証された接続だけにメッセージを送信するには、SignalR メッセージの user ID を設定します。

[FunctionName("SendMessage")]
public static Task SendMessage(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]object message, 
    [SignalR(HubName = "chat")]IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
        new SignalRMessage 
        {
            // the message will only be sent to this user ID
            UserId = "userId1",
            Target = "newMessage",
            Arguments = new [] { message }
        });
}

グループに送信する

グループに追加された接続だけにメッセージを送信するには、SignalR メッセージの group name を設定します。

[FunctionName("SendMessage")]
public static Task SendMessage(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]object message,
    [SignalR(HubName = "chat")]IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
        new SignalRMessage
        {
            // the message will be sent to the group with this name
            GroupName = "myGroup",
            Target = "newMessage",
            Arguments = new [] { message }
        });
}

グループ管理

SignalR Service を使用すると、ユーザーをグループに追加できます。 その後にメッセージをグループに送信できます。 SignalR 出力バインドを使用して、ユーザーのグループ メンバーシップを管理できます。

ユーザーをグループに追加する

次の例では、ユーザーをグループに追加します。

[FunctionName("addToGroup")]
public static Task AddToGroup(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest req,
    ClaimsPrincipal claimsPrincipal,
    [SignalR(HubName = "chat")]
        IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
    var userIdClaim = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier);
    return signalRGroupActions.AddAsync(
        new SignalRGroupAction
        {
            UserId = userIdClaim.Value,
            GroupName = "myGroup",
            Action = GroupAction.Add
        });
}

グループからユーザーを削除する

次の例では、ユーザーをグループから削除します。

[FunctionName("removeFromGroup")]
public static Task RemoveFromGroup(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]HttpRequest req,
    ClaimsPrincipal claimsPrincipal,
    [SignalR(HubName = "chat")]
        IAsyncCollector<SignalRGroupAction> signalRGroupActions)
{
    var userIdClaim = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier);
    return signalRGroupActions.AddAsync(
        new SignalRGroupAction
        {
            UserId = userIdClaim.Value,
            GroupName = "myGroup",
            Action = GroupAction.Remove
        });
}

注意

ClaimsPrincipal を正しくバインドするためには、Azure Functions で認証設定を構成しておく必要があります。

構成

SignalRConnectionInfo

次の表は、function.json ファイルと SignalRConnectionInfo 属性で設定したバインド構成のプロパティを説明しています。

function.json のプロパティ 属性のプロパティ 説明
type 該当なし signalRConnectionInfo に設定する必要があります。
direction 該当なし in に設定する必要があります。
name 該当なし 接続情報オブジェクトの関数コードで使用される変数名。
hubName HubName この値は、接続情報が生成される SignalR ハブの名前に設定する必要があります。
userId UserId 省略可能:アクセス キー トークンに設定するユーザー識別子要求の値。
connectionStringSetting ConnectionStringSetting SignalR Service 接続文字列を含むアプリ設定の名前 (既定値は "AzureSignalRConnectionString")

SignalR

次の表は、function.json ファイルと SignalR 属性で設定したバインド構成のプロパティを説明しています。

function.json のプロパティ 属性のプロパティ 説明
type 該当なし signalR に設定する必要があります。
direction 該当なし out に設定する必要があります。
name 該当なし 接続情報オブジェクトの関数コードで使用される変数名。
hubName HubName この値は、接続情報が生成される SignalR ハブの名前に設定する必要があります。
connectionStringSetting ConnectionStringSetting SignalR Service 接続文字列を含むアプリ設定の名前 (既定値は "AzureSignalRConnectionString")

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。

次のステップ