如何在前端之外触发SignalR命令

问题描述 投票:2回答:1

我觉得我要么错过了SignalR服务的要点,要么我的架构错了。

使用Azure SignalR服务,我有前端到前端的通信工作;

Startup.cs

public void Configuration(IAppBuilder app)
{
    ConfigureAuth(app);
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    app.MapAzureSignalR(this.GetType().FullName);
}

Hub.cs

private void BroadcastMessage(string message)
{
    Clients.All.broadcastMessage(message);
}

的index.html

hubName.client.broadcastMessage = function (message) {
    alert(message);
};

$('#btn').click(function () {
    hubName.server.broadcastMessage("Hello World");
});

这很好,当我需要后端触发消息时,我使用以下内容;

Functions.cs

HubConnection signalr = new HubConnection("http://localhost:57690/");
IHubProxy hub = null;
if (signalr.State == ConnectionState.Disconnected)
{
    hub = signalr.CreateHubProxy(hubName);
    signalr.Start().Wait();
}
hub.Invoke(functionName, args);
signalr.Stop();

虽然这是有效的,但它让我想知道我是否已经错误地实现了它,因为这会让http://localhost:57690/signalr/hubs对来自任何来源的帖子开放。

在前端,我必须提供Endpoint=https://appName.service.signalr.net;AccessKey=xxxxx设置,但不是从后端。

除了安全问题之外,这让我质疑SignalR服务在此目的中的用途。

当然必须有更好的方法从后端调用信号器。

非常感谢,

汤姆

c# asp.net azure signalr signalr-service
1个回答
0
投票

在Startup.cs中你必须有一行这样的代码

services.AddSignalR().AddAzureSignalR();

通过不将参数传递给AddAzureSignalR(),此代码使用缺省配置密钥Azure:SignalR:ConnectionString作为SignalR服务资源连接字符串。

你可以在这个article找到更多信息

© www.soinside.com 2019 - 2024. All rights reserved.