【发布时间】:2016-03-15 17:26:00
【问题描述】:
SignalR 跨域 javascript 客户端 集线器启动方法 仅在订阅客户端方法时才会失败。如果客户端方法没有订阅,hub start 调用成功,server 方法调用成功。
$.connection.hub.url = 'http://my-cross-domain.com:876/signalr';
$.connection.hub.logging = true;
var chatHub = $.connection.chatHub;
chatHub.client.displayMessage = function (windowID, message) {
alert("test");
};
$.connection.hub.start().done(function () {
alert("Connected");
});
如果 chatHub.client.displayMessage 没有订阅。它启动和连接良好。
但是如果客户端方法被订阅,它不会连接并抛出
no-access-control-allow-origin-header-is-present-on-the-requested-resource 一种错误。
更新:
忘了提到我正在使用 CORS for SignalR,正如 Jay 在下面指出的那样。它也是一个带有 WebAPI 控制器的 MVC 应用程序。
请帮忙!
【问题讨论】:
-
您是否手动将
jQuery.support.cors设置为true?如果您手动将 jQuery 设置为接受 cors,则会导致 SignalR 失败 -
不,我没有这样做。谢谢。
-
您能加入
start().fail()承诺和console.log(arguments)吗? -
如果您可以访问服务器端调试,可能值得覆盖服务器上的
onConnected函数并检查HttpContext对象,以查看服务器是否真的发回了正确的标头 -
Jay,感谢 cmets。 start().fail() 给出 Error: Error during start request。停止连接。 顺便说一句,希望您已经看到我添加的最新控制台屏幕截图。如果我发现服务器没有发送正确的标头,我能做些什么吗?
标签: javascript signalr