2013-06-01 8 views
15

Próbuję uzyskać super proste połączenie koncentratora działające między domenami, ale bez powodzenia. Przeczytałem dziesiątki postów i zrobiłem wszystko, o czym wspomniałem, ale wciąż nie udało mi się.Jak uzyskać połączenie z routerem SignalR do pracy między domenami?

Moja piasta serwer jest tutaj

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

Moi MapHubs serwera nazywają to tutaj

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

Każdy mój javascript klient jest tutaj

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

Problem polega na tym, że nigdy nie osiągnie Połączenie zakończone powodzeniem lub nie powiodło się, a wywołanie alertu (czat) jest niezdefiniowane.

Próbowałem kilka kombinacji dla linii $ .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/'; 

konsoli programisty w Chrome i Firebug dać mi błąd

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

w tej samej domenie it działa w porządku. To naprawdę doprowadza mnie do szaleństwa, więc każda pomoc będzie doceniona.

Dzięki Jason

Odpowiedz

17

Twój serwer jest gospodarzem domeny przekrój jeszcze próbujesz uzyskać piast z bieżącej domenie. W związku z tym nie można pobrać pliku koncentratorów i nie masz serwera proxy, z którym można pracować (dlatego wszystko nie działa).

Więc masz dwie opcje:

  1. ręcznie utworzyć plik koncentratory i udostępniać je na bieżącej domenie: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#manualproxy.
  2. Użyj interfejsu API połączenia z koncentratorem i nie uwzględniaj w ogóle pliku signalr/hubs.

Oto fragment kodu opisujący sposób korzystania z interfejsu API połączenia podstawowego: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#nogenconnection (drugi fragment kodu).

+0

Niesamowite, dzięki! Tak naprawdę próbowałem używać ręcznej metody proxy (2) i nie miałem szczęścia, ale musiałem mieć coś innego w tym czasie. Próbowałem go ponownie i działałem. Teraz, aby działało na PhoneGap, ale to wyzwanie na kolejny dzień. – Jason

+0

@Jason - jakiekolwiek szczęście z phonegap i signalr? Chcąc to zrobić w przyszłym tygodniu, byłoby pomocne usłyszeć, że ktoś inny sprawił, że to zadziałało. –

+0

@DeeMac - nie zakończyliśmy projektu (kwestia finansowania klienta), więc nie zrobiłem z nim więcej. Z tego, co widziałem, SignalR ewoluował całkiem sporo, odkąd ostatni raz z nim pracowałem. Baw się dobrze, to całkiem fajna technologia. – Jason