À l'aide de connexions persistantes et d'un client JavaScript ASP.NET, j'essaie de me connecter à un sous-domaine différent de celui utilisé pour la page.
La page ASP.Net du serveur Web sub1.mydomain.com
souhaite se connecter à SignalR à sub2.mydomain.com
. Le même code fonctionne bien lors de la connexion dans le même sous-domaine.
J'ai trouvé un autre poste où les connexions entre domaines ont été activées avec:
jQuery.support.cors = true;
mais cela n'a pas fonctionné pour moi.
Comment puis-je me connecter à SignalR dans un deuxième sous-domaine à l'aide d'une connexion persistante et d'un client JavaScript?
Pour que cela fonctionne, vous devez effectuer l'une des opérations suivantes:
$.connection.hub.url = 'http://subdomain.domain.com/signalr';
, en pointant sur votre sous-domaine.Activer le cross domain sur le serveur:
RouteTable.Routes.MapHubs(new HubConfiguration()
{
EnableCrossDomain = true
});
Dans la version actuelle de SignalR, à l'aide du package CORS désormais séparé, l'API pour cela a été modifiée en:
public void Configuration(IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
};
map.RunSignalR(hubConfiguration);
});
}
Voir Guide de l'API ASP.NET SignalR Hubs - Client JavaScript .
Si vous passez de 0.5.1 à 0.5.2, vous avez peut-être eu les effets suivants:
$.connection.hub.start({ transport: 'longPolling', xdomain: true }, function () {...
Ce qui peut être changé pour:
$.connection.hub.start({ jsonp: true }, function () {...
Dans Signalr2, vous pouvez utiliser la pré-version de Microsoft.Owin.Cors, actuellement 3.0.0-rc1 au moment de l’écriture: Microsoft.Owin.Cors .
Plus d'informations peuvent être trouvées ici:
Ce qui a vraiment résolu mon problème était:
1 - Ajoutez ceci à global.asax:
RouteTable.Routes.MapHubs(new HubConfiguration() {
EnableCrossDomain = true
});
2- Configurez le web.config de mon projet web pour activer le cross-domain:
<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- Ensuite, je modifie l'implémentation sur mon html, en modifiant $ .connection () comme suit:
var connection = $.hubConnection('http://localhost.my:8081/signalr'); var chatHubProxy = connection.createHubProxy('chatHub');
Les versions que j'utilise:
signalR-1.1.0
jquery.signalR-1.1.3.js
dot.net 4.0
var connection = $.connection('http://somecrossdomainurl/echo')
connection.start({ transport: 'longPolling', xdomain: true });