1

我们正在尝试将 azure signalR 服务与我们的 azure 函数应用程序连接起来。我们在函数应用程序中有一个协商方法,该方法将SignalRConnectionInfo对象返回给客户端,在此之前,它会调用 signalR 服务。SignalRConnectionInfo我们希望在调用 Azure signalR 服务并返回对象之前进行数据库调用。我们正在使用Microsoft.Azure.WebJobs.Extensions.SignalRService 1.0.0,我们的协商功能如下所示

   [FunctionName("negotiate")]
    public static SignalRConnectionInfo GetSignalRInfo(
        [HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req,
        [SignalRConnectionInfo(HubName = "simplechat", UserId = "{headers.x-ms-signalr-userid}")] SignalRConnectionInfo connectionInfo)
    {
        return connectionInfo;
    }

似乎图书馆正在从标题中获取用户 ID 并传递给 signalR 服务。在让库调用 signalR 服务之前,有什么方法可以执行一些代码?

Microsoft.Azure.WebJobs.Extensions.SignalRService 1.2.0几种方法可以实现这一点,如下所示。

 [FunctionName("negotiate")]
    public static SignalRConnectionInfo GetSignalRInfo(
        [HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req)
    {
        var userId = req.Query["userid"];
        var hubName = req.Query["hubname"];
        // Doing database check here 
        var connectionInfo = new SignalRConnectionInfo();
        var serviceManager = StaticServiceHubContextStore.Get().ServiceManager;
        connectionInfo.AccessToken = serviceManager
            .GenerateClientAccessToken(
                hubName,
                userId,
                new List<Claim> { new Claim("claimType", "claimValue") });
        connectionInfo.Url = serviceManager.GetClientEndpoint(hubName);
        return connectionInfo;
    }

也通过使用基于类的集线器

public class SimpleChat : ServerlessHub
{

    [FunctionName("negotiate")]
    public SignalRConnectionInfo Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequest req)
    {
        // Doing Db check here
        return Negotiate(req.Headers["x-ms-signalr-user-id"], GetClaims(req.Headers["Authorization"]));
    }

我想使用库的 1.0.0 来实现类似的功能。有人可以帮忙吗?

4

0 回答 0