web-dev-qa-db-fra.com

Comment puis-je obtenir une connexion concentrateur SignalR pour travailler entre domaines?

J'essaye d'obtenir une connexion de hub super simple fonctionnant entre domaines mais sans chance. J'ai lu des dizaines de messages et fait tout ce qui est mentionné mais toujours pas de succès.

Mon hub serveur est ici

public class ChatHub : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.broadcastMessage(name, message);
    }
}

L'appel de mon serveur MapHubs est ici

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

Tout mon client javascript est ici

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-2.0.1.min.js"></script>
    <script src="~/Scripts/jquery.signalR-1.1.2.min.js"></script>
    <script src="/signalr/hubs"></script>
</head>
<body>
    <div class="container">
        <input type="text" id="displayname" value="Test" />
        <input type="text" id="message" value="I'm here" />
        <input type="button" id="sendmessage" value="Send" />
    </div>
    <script type="text/javascript">
        $(function ()
        {
            $.connection.hub.url = 'http://<my url>/';
            var chat = $.connection.chatHub;
            alert(chat);
            $.connection.hub.start().done(function ()
            {
                alert("Connection succeeded");
            }).fail(function ()
            {
                alert("Connection failed");
            });
        });
    </script>
</body>
</html>

Le problème est qu'il n'atteint jamais les alertes de connexion réussies ou échouées et que l'appel d'alerte (chat) renvoie undefined.

J'ai essayé plusieurs combinaisons pour la ligne $ .connection.hub.url

$.connection.hub.url = 'http://<My url>';
$.connection.hub.url = 'http://<My url>/';
$.connection.hub.url = 'http://<My url>/signalr';
$.connection.hub.url = 'http://<My url>/signalr/';

La console développeur de Chrome et Firebug me donnent l'erreur

Uncaught Error: SignalR: Error loading hubs. Ensure your hubs reference is correct, e.g. <script src='/signalr/hubs'></script>. 

Sur le même domaine, cela fonctionne bien. Cela commence vraiment à me rendre fou, donc toute aide serait appréciée.

Merci, Jason

22
Jason

Votre serveur est hébergé sur plusieurs domaines, mais vous essayez d'obtenir les concentrateurs du domaine actuel. Par conséquent, il ne parvient pas à récupérer le fichier hubs et vous n'avez pas réellement de proxy avec lequel travailler (c'est pourquoi tout ne fonctionne pas).

Vous avez donc deux options:

  1. Créez manuellement le fichier hubs et hébergez-le sur le domaine actuel: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#manualproxy .
  2. Utilisez l'API de connexion brute du concentrateur et n'incluez pas du tout le fichier signalr/hubs.

Voici un extrait de code de la façon dont vous pouvez utiliser l'API de connexion concentrateur brut: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#nogenconnection = (deuxième extrait de code).

19
N. Taylor Mullen