我们正在尝试将 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 来实现类似的功能。有人可以帮忙吗?