0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

デフォルトモードのAzure SignalR ServiceをWebアプリとFunctionsで共用する

Posted at

知りたいこと

Azure SignalR Serviceのマニュアルを見ると、Functionsを接続する場合はサーバレスモードのSignalRを使ってね、と読める。下記が両立するのかを知りたい

  • WebアプリとFunctionsでSignalRを共用したい
  • Webアプリ側は通常のハブプログラミングモデルを使いたい

やったこと

  • SignalRのインスタンスをデフォルトモードで作成
  • WebアプリとしてAppService上にこれをデプロイ
  • Functionsをこれをもとに作成

Functionsのコード

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;

namespace FunctionApp1
{
    public static class Function1
    {
        //メッセージ送信
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            [SignalR(HubName = "chatsamplehub")] IAsyncCollector<SignalRMessage> signalRMessages,
            ILogger log)
        {

            //メッセージを送信 お試しのため内容は固定値
            await signalRMessages.AddAsync(
                new SignalRMessage
                {
                    Target = "BroadcastMessage",
                    Arguments = new[] { "name", "message" }
                }
            );

            string responseMessage = "done";

            return new OkObjectResult(responseMessage);
        }

        //ネゴシエート
        [FunctionName("negotiate")]
        public static SignalRConnectionInfo Negotiate(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
            [SignalRConnectionInfo(HubName = "chatsamplehub")] SignalRConnectionInfo connectionInfo)
        {
            return connectionInfo;
        }
    }
}

結果

ネゴシエート

接続用のトークンが取得できている→OK
image.png

メッセージ送信

実行成功
image.png

ほかのクライアントでメッセージをちゃんと受信できている→OK
image.png

わかったこと考えたこと

デフォルトモードのSignalRにFunctionsから接続し、メッセージを送ることができた
→Webアプリがサーバ側としてSignalRに継続して接続している場合は、デフォルトモードのSignalRが使えるが、サーバ接続がない場合は、サーバレスモードを使わないといけない、ということかもしれない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?