Клиенты нулевы при попытке отправить сообщение через Signalr

StackOverflow https://stackoverflow.com/questions/9350853

Вопрос

У меня есть следующий хаб в моем приложении 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);

Другие советы

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

https://github.com/signalr/signalr/wiki/quickstart-hubs

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top