tutorial net hubconnection hub example aspnet asp asp.net asp.net-mvc signalr cors

asp.net - net - signalr hubconnection javascript



Cómo usar conexiones entre dominios(CORS-Access Control Allow Origin) con SignalR (6)

var connection = $.connection(''http://somecrossdomainurl/echo'') connection.start({ transport: ''longPolling'', xdomain: true });

https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client

Utilizando conexiones persistentes y un cliente JavaScript de ASP.NET, estoy tratando de conectarme a un subdominio distinto del que se envió a la página.

La página ASP.Net del servidor web sub1.mydomain.com desea conectarse a SignalR en sub2.mydomain.com . El mismo código funciona bien cuando se conecta dentro del mismo subdominio.

Encontré otra publicación donde las conexiones entre dominios estaban habilitadas con:

jQuery.support.cors = true;

pero esto no funcionó para mí.

¿Cómo puedo conectarme a SignalR en un segundo subdominio usando una conexión persistente y un cliente de JavaScript?


Si cambia de 0.5.1 a 0.5.2, es posible que haya tenido lo siguiente:

$.connection.hub.start({ transport: ''longPolling'', xdomain: true }, function () {...

Que se puede cambiar a:

$.connection.hub.start({ jsonp: true }, function () {...


Lo que realmente resolvió mi problema fue:

1 - Agregue esto a global.asax:

RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });

2- Configurar el web.config de mi proyecto web para habilitar el dominio cruzado:

<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> </customHeaders> </httpProtocol> </system.webServer>

3- Luego cambio la implementación en mi html, cambiando $ .connection () a lo siguiente:

var connection = $.hubConnection(''http://localhost.my:8081/signalr''); var chatHubProxy = connection.createHubProxy(''chatHub'');

Versiones que estoy usando:

  • signalR-1.1.0

  • jquery.signalR-1.1.3.js

  • dot.net 4.0



Debe hacer uno de los siguientes para que funcione:

  • Configure $.connection.hub.url = ''http://subdomain.domain.com/signalr''; , apuntando a su subdominio.
  • Habilitar dominio cruzado en el servidor:

    RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });


En la versión actual de SignalR, utilizando el paquete CORS ahora separado, la API para esto ha cambiado a:

public void Configuration(IAppBuilder app) { app.Map("/signalr", map => { map.UseCors(CorsOptions.AllowAll); var hubConfiguration = new HubConfiguration { }; map.RunSignalR(hubConfiguration); }); }

Consulte la Guía de la API de ASP.NET SignalR Hubs - JavaScript Client .