none
Cross Domain Signal R configuración RRS feed

  • Pregunta

  • Tengo dos aplicaciones la A y la B.

    La A será el servidor de notificaciones donde está instalado el SignalR 2.4.1.

    LA B será la aplicación que intentará conectarse a la A para buscar nuevas notificaciones.

    Al momento de que el cliente de la aplicacion B quiere descargar los hubs de la aplicacion A este request dura mucho tiempo y nunca se obtienen los hubs.

    Creo que estro teniendo problemas con el Cross Domain pero no estoy seguro. Ambas aplicaciones las estoy corriendo en Chrome versión: 76.0.3809.100

    Codigo de aplicacion A Startup

    public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.Map("/signalr", map =>
                {
                    // Setup the CORS middleware to run before SignalR.
                    // By default this will allow all origins. You can 
                    // configure the set of origins and/or http verbs by
                    // providing a cors options with a different policy.
                    map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration = new HubConfiguration
                    {
                        // You can enable JSONP by uncommenting line below.
                        // JSONP requests are insecure but some older browsers (and some
                        // versions of IE) require JSONP to work cross domain
                        //EnableJSONP = true
                };
                    // Run the SignalR pipeline. We're not using MapSignalR
                    // since this branch already runs under the "/signalr"
                    // path.
                    map.RunSignalR(hubConfiguration);
                });
            }
        }
    
    
    

    Hub

    public class CrossDomainHub:Hub
        {
            public void StartTimer()
            {
               Clients.All.showTime(DateTime.UtcNow.ToLongTimeString());
            }
        }


    Cliente de aplicacion B

    <script type="text/javascript" src="~/Scripts/jquery.signalR-2.4.1.js"></script>
    <script type="text/javascript" src="http://localhost:44346/signalr/hubs"></script>
    <script type="text/javascript">
    
    
        $.connection.hub.url = 'http://localhost:44346/signalr';
        var myHub = $.connection.crossDomainHub;
    
        myHub.client.showTime = function (dateTimeFromServer) {
            $('#dateTime').html(dateTimeFromServer);
        }
    
        $.connection.hub.start().done(function () {
            myHub.server.startTimer();
        });
    </script>

    Al inspeccionar el elmento en el script del hub nunca termina se agota el tiempo no da señales de vida.

    Alguna idea? 



    Alejandro Gomez Estudiante en apuros


    • Editado agg9505 miércoles, 14 de agosto de 2019 19:11 error de dedo
    miércoles, 14 de agosto de 2019 19:10

Respuestas

  • Esto se utiliza cuando la conexion del SignalR es al mismo dominio.

    public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }

    Como yo la hacia a un dominio distinto tenia que utilizar 

    public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.Map("/signalr", map =>
                {
                    // Setup the CORS middleware to run before SignalR.
                    // By default this will allow all origins. You can 
                    // configure the set of origins and/or http verbs by
                    // providing a cors options with a different policy.
                    map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration = new HubConfiguration
                    {
                        // You can enable JSONP by uncommenting line below.
                        // JSONP requests are insecure but some older browsers (and some
                        // versions of IE) require JSONP to work cross domain
                        //EnableJSONP = true
                };
                    // Run the SignalR pipeline. We're not using MapSignalR
                    // since this branch already runs under the "/signalr"
                    // path.
                    map.RunSignalR(hubConfiguration);
                });
            }
        }
    

    El problema era el protocolo de seguridad, no estaba incluyendo la s en httpS del link de los scripts.


    Alejandro Gomez Estudiante en apuros

    • Marcado como respuesta agg9505 lunes, 2 de septiembre de 2019 21:24
    lunes, 2 de septiembre de 2019 21:24

Todas las respuestas

  • hola

    >>Creo que estro teniendo problemas con el Cross Domain pero no estoy seguro

    si analizamos la documentacion

    Tutorial: Real-time chat with SignalR 2

    veo que usa

        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }

    eso donde lo estas definiendo ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de agosto de 2019 17:55
  • Esto se utiliza cuando la conexion del SignalR es al mismo dominio.

    public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }

    Como yo la hacia a un dominio distinto tenia que utilizar 

    public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.Map("/signalr", map =>
                {
                    // Setup the CORS middleware to run before SignalR.
                    // By default this will allow all origins. You can 
                    // configure the set of origins and/or http verbs by
                    // providing a cors options with a different policy.
                    map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration = new HubConfiguration
                    {
                        // You can enable JSONP by uncommenting line below.
                        // JSONP requests are insecure but some older browsers (and some
                        // versions of IE) require JSONP to work cross domain
                        //EnableJSONP = true
                };
                    // Run the SignalR pipeline. We're not using MapSignalR
                    // since this branch already runs under the "/signalr"
                    // path.
                    map.RunSignalR(hubConfiguration);
                });
            }
        }
    

    El problema era el protocolo de seguridad, no estaba incluyendo la s en httpS del link de los scripts.


    Alejandro Gomez Estudiante en apuros

    • Marcado como respuesta agg9505 lunes, 2 de septiembre de 2019 21:24
    lunes, 2 de septiembre de 2019 21:24