如何使 .Net Core 控制台应用程序连接到 SignalR 服务(在无服务器模式下)然后从服务器接收消息
How to make .Net Core Console app connect to SignalR service(in serverless mode) then receive messages from the server
所以我写了一个 Azure Function 如下:
public static class Negotiate
{
[FunctionName("Negotiate")]
public static SignalRConnectionInfo GetSignalRInfo(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[SignalRConnectionInfo(HubName = "chat")] SignalRConnectionInfo connectionInfo)
{
return connectionInfo;
}
}
[FunctionName("messages")]
public static Task SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] object message,
[SignalR(HubName = "chat")] IAsyncCollector<SignalRMessage> signalRMessages)
{
/* it passes in SignalRMessage that consists of two things:
Target : this is the name of an event, in this case, newMessage. A client can listen to this event and render its payload for example
Arguments : this is simply the payload, in this case, we just want to broadcast all messages that come from one client,
to ensure other listening clients would be updated on the fact that there is new data.*/
return signalRMessages.AddAsync(
new SignalRMessage
{
Target = "newMessage",
Arguments = new[] { message }
});
}
}
现在我想编写一个 .Net Core 控制台应用程序,以便能够连接到 Azure SignalR 服务并从 AzureFunction 接收消息
我是 Azure 服务的新手,我需要帮助提前谢谢你
SignalR 服务配置
Azure SignalR 服务可以配置为不同的模式。与 Azure Functions 一起使用时,服务必须配置为 Serverless 模式。
转到 Azure 门户,找到 SignalR 服务资源的 Settings 页面。
将服务模式设置为Serverless.
Azure 函数开发
使用 Azure Functions 和 Azure SignalR 服务构建的无服务器应用程序需要两个 Azure Functions:
- 客户端调用以获取有效 SignalR 服务访问令牌和服务端点的“协商”函数 URL。
- 处理来自 SignalR 服务的消息并发送消息或管理组成员身份的函数。
处理从 SignalR 服务发送的消息
使用 SignalR 触发器 绑定来处理从 SignalR 服务发送的消息。
有关详细信息,请参阅 SignalR trigger binding reference.
发送消息和管理群组成员资格
使用 SignalR 输出绑定将消息发送到连接到 Azure SignalR Service.see SignalR output binding reference.
的客户端
SignalR 集线器
public class SignalRTestHub : ServerlessHub
{
[FunctionName("negotiate")]
public SignalRConnectionInfo Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequest req)
{
return Negotiate(req.Headers["x-ms-signalr-user-id"], GetClaims(req.Headers["Authorization"]));
}
[FunctionName(nameof(OnConnected))]
public async Task OnConnected([SignalRTrigger]InvocationContext invocationContext, ILogger logger)
{
await Clients.All.SendAsync(NewConnectionTarget, new NewConnection(invocationContext.ConnectionId));
logger.LogInformation($"{invocationContext.ConnectionId} has connected");
}
[FunctionName(nameof(Broadcast))]
public async Task Broadcast([SignalRTrigger]InvocationContext invocationContext, string message, ILogger logger)
{
await Clients.All.SendAsync(NewMessageTarget, new NewMessage(invocationContext, message));
logger.LogInformation($"{invocationContext.ConnectionId} broadcast {message}");
}
[FunctionName(nameof(OnDisconnected))]
public void OnDisconnected([SignalRTrigger]InvocationContext invocationContext)
{
}
}
使用SignalRFilterAttribute
客户开发
配置客户端连接
要连接到 SignalR 服务,客户端必须成功完成连接
- 向协商 HTTP 端点发出请求以获取有效的连接信息
- 使用服务端点 URL 和从 协商 端点
获得的访问令牌连接到 SignalR 服务
从客户端向服务发送消息
connection.send('method1', 'arg1', 'arg2');
Azure 函数配置
与 Azure SignalR 服务集成的 Azure Function 应用程序可以像任何典型的 Azure Function 应用程序一样部署,使用 continuously deployment, zip deployment, and run from package.
等技术
启用 CORS
本地主机
云 - Azure Functions CORS
要在 Azure Functions 应用程序上启用 CORS,请转到
Azure Portal -->Function app -->Platform Features --> CORS 配置
更多资讯请关注MS Document
所以我写了一个 Azure Function 如下:
public static class Negotiate
{
[FunctionName("Negotiate")]
public static SignalRConnectionInfo GetSignalRInfo(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[SignalRConnectionInfo(HubName = "chat")] SignalRConnectionInfo connectionInfo)
{
return connectionInfo;
}
}
[FunctionName("messages")]
public static Task SendMessage(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] object message,
[SignalR(HubName = "chat")] IAsyncCollector<SignalRMessage> signalRMessages)
{
/* it passes in SignalRMessage that consists of two things:
Target : this is the name of an event, in this case, newMessage. A client can listen to this event and render its payload for example
Arguments : this is simply the payload, in this case, we just want to broadcast all messages that come from one client,
to ensure other listening clients would be updated on the fact that there is new data.*/
return signalRMessages.AddAsync(
new SignalRMessage
{
Target = "newMessage",
Arguments = new[] { message }
});
}
}
现在我想编写一个 .Net Core 控制台应用程序,以便能够连接到 Azure SignalR 服务并从 AzureFunction 接收消息 我是 Azure 服务的新手,我需要帮助提前谢谢你
SignalR 服务配置
Azure SignalR 服务可以配置为不同的模式。与 Azure Functions 一起使用时,服务必须配置为 Serverless 模式。 转到 Azure 门户,找到 SignalR 服务资源的 Settings 页面。 将服务模式设置为Serverless.
Azure 函数开发
使用 Azure Functions 和 Azure SignalR 服务构建的无服务器应用程序需要两个 Azure Functions:
- 客户端调用以获取有效 SignalR 服务访问令牌和服务端点的“协商”函数 URL。
- 处理来自 SignalR 服务的消息并发送消息或管理组成员身份的函数。
处理从 SignalR 服务发送的消息
使用 SignalR 触发器 绑定来处理从 SignalR 服务发送的消息。 有关详细信息,请参阅 SignalR trigger binding reference.
发送消息和管理群组成员资格
使用 SignalR 输出绑定将消息发送到连接到 Azure SignalR Service.see SignalR output binding reference.
的客户端SignalR 集线器
public class SignalRTestHub : ServerlessHub
{
[FunctionName("negotiate")]
public SignalRConnectionInfo Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)]HttpRequest req)
{
return Negotiate(req.Headers["x-ms-signalr-user-id"], GetClaims(req.Headers["Authorization"]));
}
[FunctionName(nameof(OnConnected))]
public async Task OnConnected([SignalRTrigger]InvocationContext invocationContext, ILogger logger)
{
await Clients.All.SendAsync(NewConnectionTarget, new NewConnection(invocationContext.ConnectionId));
logger.LogInformation($"{invocationContext.ConnectionId} has connected");
}
[FunctionName(nameof(Broadcast))]
public async Task Broadcast([SignalRTrigger]InvocationContext invocationContext, string message, ILogger logger)
{
await Clients.All.SendAsync(NewMessageTarget, new NewMessage(invocationContext, message));
logger.LogInformation($"{invocationContext.ConnectionId} broadcast {message}");
}
[FunctionName(nameof(OnDisconnected))]
public void OnDisconnected([SignalRTrigger]InvocationContext invocationContext)
{
}
}
使用SignalRFilterAttribute
客户开发
配置客户端连接
要连接到 SignalR 服务,客户端必须成功完成连接
- 向协商 HTTP 端点发出请求以获取有效的连接信息
- 使用服务端点 URL 和从 协商 端点 获得的访问令牌连接到 SignalR 服务
从客户端向服务发送消息
connection.send('method1', 'arg1', 'arg2');
Azure 函数配置
与 Azure SignalR 服务集成的 Azure Function 应用程序可以像任何典型的 Azure Function 应用程序一样部署,使用 continuously deployment, zip deployment, and run from package.
等技术启用 CORS
本地主机
云 - Azure Functions CORS
要在 Azure Functions 应用程序上启用 CORS,请转到
Azure Portal -->Function app -->Platform Features --> CORS 配置
更多资讯请关注MS Document