【发布时间】:2019-04-18 12:43:56
【问题描述】:
我觉得我要么错过了 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