none
SignalR, estudio de caso en Visual Studio 2015 RRS feed

  • Pregunta

  • Hola, estoy estudiando SignalR para desarrollar una aplicación en tiempo real, pero no consigo que se ejecute la aplicación de prueba. El código de cliente que estoy usando es:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="utf-8" />
        <script src="/scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
        <script src="/scripts/jquery.signalR-2.2.0.min.js" type="text/javascript"></script>
        <script src="~/signalr/hubs" type="text/javascript"></script>
        <script type="text/javascript">
    $(function () {
        var broadcaster = $.connection("/SamplePC");
        broadcaster.error(function (err) {
            alert("Parece haber un problema \n" + "Error: " + err.message);
        });
        broadcaster.client.displayText = function (text) {
            $('#messages').append('<li>' + text + '</li>');
        };
        $.connection.start()
            .done(function () {
                $("#broadcast").click(function () {
                    broadcaster.server.BroadcastMessage($('#msg').val());
                });
           })
            .fail(function() {
                alert ('Error en la conexion');
            });
        connection.received(function (msg) {
            $("#messages").append("<li>" + msg + "</li>");
        });
    });
        </script>
        </head>
    <body>
        <div>
            <input type="text" id="msg" />
            <input type="button" id="broadcast" value="Broadcast" />
            <ul id="messages"></ul>
        </div>
        </body>
    </html>

    Cuando visualizo la página web en el navegador, se renderizan el campo de texto y el botón. No aparece ningún mensaje de error, pero el botón no hace nada, es como si no ejecutara el script.

    Los códigos de servidor son:

    STARUP.CS

    using Microsoft.Owin;
    using Owin;
    using Microsoft.AspNet.SignalR;


    [assembly: OwinStartupAttribute(typeof(WebApplication1.Startup))]
    namespace WebApplication1
    {
        public partial class Startup {
            public void Configuration(IAppBuilder app) {
                app.MapSignalR<MyConnection1>("/SamplePC");
                /*ConfigureAuth(app);*/
            }
        }
    }

    PERSISTENT CONNECTION

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.AspNet.SignalR;

    namespace SamplePersistentConnection.PersistentConnections
    {
        class SamplePersistentConnection : PersistentConnection
        {
            protected override Task OnReceived(IRequest request, string connectionId, string data)
            {
                return this.Connection.Broadcast(data); /*base.OnReceived(request, connectionId, data);*/
            }

            protected override Task OnConnected(IRequest request, string connectionId)
            {
                // Notify all connected clients
                return this.Connection.Broadcast("New connection: " + connectionId);
            }
             Task OnDisconnect(IRequest request, string connectionId)
            {
                // Notify all connected clients
                return this.Connection.Broadcast("Bye bye, " + connectionId);
            }
        }
    }

    ¿Alguien sabe porqué no consigo que funcione?

    Gracias anticipadas.

    Nota: Estoy usando Visual Studio 2015 corriendo sobre Windows 7 - Home Edition

    lunes, 2 de mayo de 2016 9:33

Respuestas

  • Bueno, ya lo he solucionado.

    Los códigos quedan así y funcionan:

    Cliente:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="utf-8" />
        <script src="/scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
        <script src="/scripts/jquery.signalR-2.2.0.min.js" type="text/javascript"></script>
        <script src="~/signalr/hubs" type="text/javascript"></script>
        <script type="text/javascript">
    $(function () {
        var broadcaster = $.connection("/SamplePC", null, true);
        broadcaster.error(function (err) {
            alert("Parece haber un problema \n" + "Error: " + err.message);
        });
        broadcaster.start()
            .done(function () {
                $("#broadcast").click(function () {
                    broadcaster.send($('#msg').val());
                });
           })
            .fail(function() {
                alert ('Error en la conexion');
            });
        broadcaster.received(function (msg) {
            $("#messages").append("<li>" + msg + "</li>");
        });
    });
        </script>
        </head>
    <body>
        <div>
            <input type="text" id="msg" />
            <input type="button" id="broadcast" value="Broadcast" />
            <ul id="messages"></ul>
        </div>
        </body>
    </html>

    STARUP

    using Microsoft.Owin;
    using Owin;
    using Microsoft.AspNet.SignalR;


    [assembly: OwinStartupAttribute(typeof(WebApplication1.Startup))]
    namespace WebApplication1
    {
        public partial class Startup {
            public void Configuration(IAppBuilder app) {
                app.MapSignalR<MyConnection1>("/SamplePC");
                /*ConfigureAuth(app);*/
            }
        }
    }

    PERSISTENT CONNECTION

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Web;
    using Microsoft.AspNet.SignalR;

    namespace WebApplication1
    {
        public class MyConnection1 : PersistentConnection
        {
            protected override Task OnConnected(IRequest request, string connectionId)
            {
                return Connection.Send(connectionId, "Welcome!");
            }

            protected override Task OnReceived(IRequest request, string connectionId, string data)
            {
                return Connection.Broadcast(data);
            }
        }
    }

    Lo dejo aquí por si le sirve a alguien más.

    Un saludo.

    lunes, 2 de mayo de 2016 12:51

Todas las respuestas

  • Bueno, ya he visto que los métodos OnRecived, OnConnect y OnDisconnect han sido eliminados y sustituidos por OnReceivedAsync, etc...

    Lo he modificado en mi proyecto pero sigue sin funcionar. Asi que agradecería toda ayuda posible.

    Gracias y un saludo.

    lunes, 2 de mayo de 2016 10:24
  • Bueno, ya lo he solucionado.

    Los códigos quedan así y funcionan:

    Cliente:

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="utf-8" />
        <script src="/scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
        <script src="/scripts/jquery.signalR-2.2.0.min.js" type="text/javascript"></script>
        <script src="~/signalr/hubs" type="text/javascript"></script>
        <script type="text/javascript">
    $(function () {
        var broadcaster = $.connection("/SamplePC", null, true);
        broadcaster.error(function (err) {
            alert("Parece haber un problema \n" + "Error: " + err.message);
        });
        broadcaster.start()
            .done(function () {
                $("#broadcast").click(function () {
                    broadcaster.send($('#msg').val());
                });
           })
            .fail(function() {
                alert ('Error en la conexion');
            });
        broadcaster.received(function (msg) {
            $("#messages").append("<li>" + msg + "</li>");
        });
    });
        </script>
        </head>
    <body>
        <div>
            <input type="text" id="msg" />
            <input type="button" id="broadcast" value="Broadcast" />
            <ul id="messages"></ul>
        </div>
        </body>
    </html>

    STARUP

    using Microsoft.Owin;
    using Owin;
    using Microsoft.AspNet.SignalR;


    [assembly: OwinStartupAttribute(typeof(WebApplication1.Startup))]
    namespace WebApplication1
    {
        public partial class Startup {
            public void Configuration(IAppBuilder app) {
                app.MapSignalR<MyConnection1>("/SamplePC");
                /*ConfigureAuth(app);*/
            }
        }
    }

    PERSISTENT CONNECTION

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Web;
    using Microsoft.AspNet.SignalR;

    namespace WebApplication1
    {
        public class MyConnection1 : PersistentConnection
        {
            protected override Task OnConnected(IRequest request, string connectionId)
            {
                return Connection.Send(connectionId, "Welcome!");
            }

            protected override Task OnReceived(IRequest request, string connectionId, string data)
            {
                return Connection.Broadcast(data);
            }
        }
    }

    Lo dejo aquí por si le sirve a alguien más.

    Un saludo.

    lunes, 2 de mayo de 2016 12:51