2013-06-01 10 views
15

Sto cercando di ottenere una connessione hub super semplice che funzioni in più domini ma senza fortuna. Ho letto dozzine di post e ho fatto tutto ciò che ho menzionato, ma non ho ancora avuto successo.Come posso ottenere una connessione hub SignalR per lavorare su più domini?

mio hub del server è qui

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

miei MapHubs server di chiamata è qui

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

Qualsiasi mia javascript cliente è qui

<!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> 

Il problema è che non raggiunge mai il Avvisi di connessione riusciti o non riusciti e la chiamata di avviso (chat) non viene definita.

Ho provato diverse combinazioni per la linea $ .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 sviluppatore in Chrome e Firebug mi danno l'errore

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

sullo stesso dominio che funziona bene. Questo sta davvero iniziando a farmi impazzire, quindi ogni aiuto sarebbe apprezzato.

Grazie, Jason

risposta

17

Il server è ospitato dominio croce ma si sta cercando di ottenere i mozzi dal dominio corrente. Pertanto non è in grado di recuperare il file hub e in realtà non si dispone di un proxy con cui lavorare (motivo per cui tutto ciò non funziona).

in modo da avere due opzioni:

  1. creare manualmente il file hub e ospitano sul dominio corrente: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#manualproxy.
  2. Utilizzare l'API di connessione hub raw e non includere affatto il file signalr/hubs.

Ecco un frammento di codice di come è possibile utilizzare l'API grezzo mozzo: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#nogenconnection (secondo codice Snippet).

+0

Fantastico, grazie! In realtà avevo provato a usare il metodo proxy manuale (2) e non avevo fortuna ma dovevo aver avuto qualcos'altro di sbagliato in quel momento. Ho provato di nuovo e ho funzionato. Ora per farlo funzionare su PhoneGap, ma questa è una sfida per un altro giorno. – Jason

+0

@ Jason - qualsiasi fortuna con PhoneGap e Signalr? Cercando di crearne uno la prossima settimana, sarebbe utile sentire qualcun altro che ha funzionato. –

+0

@DeeMac - abbiamo finito per non andare avanti con il progetto (problema di finanziamento del cliente), quindi non ho ancora fatto nulla di più. Da quello che ho visto SignalR si è evoluto un bel po 'dall'ultima volta che ci ho lavorato. Divertiti, è una tecnologia piuttosto interessante. – Jason

Problemi correlati