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 });
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
En Signalr2, puede utilizar el prelanzamiento de Microsoft.Owin.Cors , actualmente 3.0.0-rc1 al momento de escribir esto: Microsoft.Owin.Cors .
Más información se puede encontrar aquí:
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 .