簡體   English   中英

如何讓SignalR集線器連接跨域工作?

[英]How do I get a SignalR hub connection to work cross-domain?

我試圖讓一個超級簡單的集線器連接跨域工作,但沒有運氣。 我已經閱讀了幾十篇文章並完成了所有提到但仍然沒有成功的帖子。

我的服務器中心在這里

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成功或失敗的警報,並且alert(chat)調用返回undefined。

我已經為$ .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>. 

在同一個域上它工作正常。 這真的開始讓我發瘋,所以任何幫助都會受到贊賞。

謝謝你,傑森

您的服務器是跨域托管的,但您正試圖從當前域獲取集線器。 因此,它無法檢索集線器文件,並且您實際上沒有代理可以使用(這就是為什么一切都不起作用)。

所以你有兩個選擇:

  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 (第二個代碼段)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM