gpt4 book ai didi

javascript - 如何让 SignalR 集线器连接跨域工作?

转载 作者:行者123 更新时间:2023-12-03 12:51:33 25 4
gpt4 key购买 nike

我试图让一个 super 简单的集线器连接跨域工作,但没有运气。我已经阅读了数十篇文章并完成了提到的所有内容,但仍然没有成功。

我的服务器集线器在这里

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 文件,并且您实际上没有可以使用的代理(这就是为什么一切都无法正常工作的原因)。

所以你有两个选择:

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

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

    关于javascript - 如何让 SignalR 集线器连接跨域工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16875228/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com