2013-06-01 44 views
15

我想获得一个超级简单的集线器连接工作的跨域,但没有运气。我读过几十篇文章,完成了所有提到的内容,但仍然没有成功。如何让SignalR集线器连接工作在跨域?

我的服务器枢纽是这里

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

我的服务器MapHubs调用是在这里

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

我的任何JavaScript客户端在这里

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

的问题是,它从来没有达到连接成功或失败警报并且警报(聊天)调用返回未定义。

我试过几种组合为$ .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/'; 

在Chrome和Firebug的开发者控制台给我的错误

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

在同一个域它工作正常。这真的开始让我疯狂,所以任何帮助将不胜感激。

感谢, 杰森

回答

17

您的服务器被托管跨域但你想从当前域的中心。因此,它无法检索集线器文件,并且实际上没有可用的代理(这就是为什么一切都不起作用)。

所以,你有两个选择:

  1. 手动创建枢纽文件并托管到当前域:http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#manualproxy
  2. 使用原始集线器连接API,并且根本不包含signalr/hubs文件。

下面是如何使用原始集线器连接API的代码片段:http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-javascript-client#nogenconnection(第二个代码段)。

+0

太棒了,谢谢!我实际上已经尝试过使用手动代理方法(2),但没有运气,但当时我一定有其他错误。我试了一遍,并得到它的工作。现在让它在PhoneGap上工作,但这是另一天的挑战。 – Jason

+0

@Jason - phonegap和signalr的运气?下周想要破解这一个,将有助于听取其他人的支持 –

+0

@DeeMac - 我们最终没有开展项目(客户资金问题),所以我没有真正做到。从我看到的信号来看,自从我上次使用它以来,SignalR已经发展了很多。尽管玩得开心,这是一个非常酷的技术。 – Jason

相关问题