Как вызвать команду SignalR вне внешнего интерфейса - PullRequest
2 голосов
/ 18 апреля 2019

Мне кажется, что я либо упускаю суть сервиса 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.

Наверняка должен быть лучший способ вызвать сигнализатор из серверной части.

Большое спасибо,

Tom

1 Ответ

0 голосов
/ 18 апреля 2019

В Startup.cs у вас должна быть строка кода, подобная этой

services.AddSignalR().AddAzureSignalR();

Не передавая параметр в AddAzureSignalR(), этот код использует конфигурационный ключ по умолчанию, Azure:SignalR:ConnectionString, для строки подключения ресурса службы SignalR.

Вы можете найти больше информации в этой статье

...