web-dev-qa-db-fra.com

Comment utiliser les connexions entre domaines (CORS - Contrôle d'origine, autoriser l'origine) avec SignalR

À 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?

22
codezoo

Pour que cela fonctionne, vous devez effectuer l'une des opérations suivantes:

  • Configurez $.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
    });
    
35
Piotr Szmyd

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 .

9
Ian Mercer

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 () {...
7
ElHaix

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: 

4
anAgent

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

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

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

1
jlp