如何获得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>. 

在同一域中,它工作得很好。这真的快把我逼疯了,所以如果有任何帮助,我将不胜感激。

谢谢,杰森

您的服务器正在跨域托管,但您正在尝试从当前域获取集线器。因此,它无法检索hubs文件,并且您实际上没有代理可以使用(这就是为什么一切都不起作用)。

你有两个选择:

  1. 手动创建hubs文件并将其托管在当前域: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(第二个代码片段)。

最新更新