Pregunta

Tengo el siguiente centro en mi aplicación MVC desde donde me gustaría enviar un mensaje simple al código del lado del cliente:

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");
            }                 
        }

Y el siguiente JavaScript en mi opinión

    <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>
}

Mi problema es que cuando el código llama al constructor, o el método de envío para el caso, el objeto del cliente es nulo.

Todo se ve bien cuando debuge el código del lado del cliente. El/Signalr/Hubs/Route devuelve el código JavaScript y no hay errores cuando se ejecuta el JavaScript.

Puedo agregar que el código de backend se ejecuta en la parte superior del entorno Umbraco 5 CMS, que no estoy seguro de que esté causando perturbaciones.

¿Alguna sugerencia sobre cómo puedo depurar/resolver esto?

¿Fue útil?

Solución

Parece que está intentando transmitir un mensaje desde el código del lado del servidor instanciando el centro. Lamentablemente no funciona así. Puede ver un ejemplo de cómo enviar mensajes desde el lado del servidor aquí: https://github.com/signalr/signalr/wiki/hubs. Eche un vistazo a la sección "transmitir sobre un centro desde fuera de un centro".

Lo siguiente se utilizaría en el lado del servidor donde desea hacer la transmisión

using SignalR.Infrastructure;

string message = "Test Message";
IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>();
dynamic clients = connectionManager.GetClients<MyHub>();
clients.addMessage(message);

Esto coincide con tu Send() Método Sin embargo, si está intentando configurar un indicador de progreso, probablemente solo desee enviar mensajes a la persona que llama. En este caso, debe actualizar el método de progreso a Caller.addMessage("Starting to analyze image");. Hacer esto desde fuera del centro es un poco más complicado, ya que deberá realizar un seguimiento de la ID del cliente para la conexión que desea actualizar. Una vez que sepa que lo anterior cambia a:

clients[clientId].addMessage(message);

Otros consejos

Necesitas leer los documentos. Todo en tu muestra se ve mal. Empieza aqui:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top