Клиенты нулевы при попытке отправить сообщение через Signalr
-
27-10-2019 - |
Вопрос
У меня есть следующий хаб в моем приложении MVC, откуда я хотел бы отправить простое сообщение в код моей клиента:
using SignalR.Hubs;
public class Progress : Hub
{
public void
Send(string message)
{
// Call the addMessage method on all clients
Clients.addMessage(message);
}
public Progress()
{
Clients.addMessage("Starting to analyze image");
}
}
И следующий JavaScript, по моему мнению
<script src="/Scripts/jquery.signalR.js" type="text/javascript"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
// Proxy created on the fly
var connection = $.connection('/signalr/hubs/progress');
// Declare a function on the chat hub so the server can invoke it
connection.addMessage = function (message) {
$('#messages').append('<li>' + message.Content + '</li>');
};
// Start the connection
connection.start();
});
</script>
}
Моя проблема заключается в том, что когда код вызывает конструктор или метод отправки по этому вопросу, объект клиентов нуль.
Все выглядит нормально, когда я отлаживаю код клиента. /SignalR/Hubs/Route возвращает код JavaScript, и при запуске JavaScript нет ошибок.
Я могу добавить, что бэкэнд -код работает поверх среды Umbraco 5 CMS, которая, как я уверен, вызывает какие -либо нарушения.
Любые предложения о том, как я могу отладить/решить это?
Решение
Похоже, вы пытаетесь транслировать сообщение из кода на стороне сервера, создавая концентратор. К сожалению, это не работает так. Вы можете увидеть пример того, как отправлять сообщения со стороны сервера здесь: https://github.com/signalr/signalr/wiki/hubs. Анкет Взгляните на «вещание над центром из -за пределов центра».
Следующее будет использовано на стороне сервера, где вы хотите сделать трансляцию
using SignalR.Infrastructure;
string message = "Test Message";
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
clients.addMessage(message);
Это соответствует вам Send()
Метод, однако, если вы пытаетесь настроить индикатор прогресса, вы, вероятно, хотите отправить сообщения только вызывающему абоненту. В этом случае вам нужно обновить метод прогресса, чтобы Caller.addMessage("Starting to analyze image");
. Анкет Сделать это извне концентратора немного сложнее, так как вам нужно будет отслеживать идентификатор клиента для подключения, которое вы хотите обновить. Как только вы узнаете, что вышеперечисленное изменяется на:
clients[clientId].addMessage(message);
Другие советы
Вам нужно прочитать документы. Все в вашем образце выглядит неправильно. Начните здесь: