SignalR跨域javascript客户端集线器启动方法仅在订阅客户端方法时失败
SignalR跨域javascript客户端集线器启动方法仅在订阅客户端方法时失败。如果未订阅客户端方法,将成功调用集线器启动,并成功调用服务器方法SignalR跨域javascript客户端集线器启动方法仅在订阅客户端方法时失败,javascript,signalr,Javascript,Signalr,SignalR跨域javascript客户端集线器启动方法仅在订阅客户端方法时失败。如果未订阅客户端方法,将成功调用集线器启动,并成功调用服务器方法 $.connection.hub.url = 'http://my-cross-domain.com:876/signalr'; $.connection.hub.logging = true; var chatHub = $.connection.chatHub; chatHub.client.displayMessage = function
$.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。它启动和连接良好
但如果客户机方法已订阅,则它不会连接并抛出
请求的资源上不存在访问控制允许源标题
一种错误
失败:订阅客户端方法时
未订阅客户端方法时成功
更新:
忘了提一下,我正在为信号机使用CORS,正如Jay在下面指出的那样。它是一个带有WebAPI控制器的MVC应用程序
$.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");
});
请帮忙 在前端,确保您未设置cors支持
jQuery.support.cors = true //Do not put this
在服务器上的startup类中,通过添加以下内容确保允许cors:
app.Map("/signalr", map =>
{
// Setup the CORS middleware to run before SignalR.
// By default this will allow all origins. You can
// configure the set of origins and/or http verbs by
// providing a cors options with a different policy.
map.UseCors(CorsOptions.AllowAll);
var hubConfiguration = new HubConfiguration
{
// You can enable JSONP by uncommenting line below.
// JSONP requests are insecure but some older browsers (and some
// versions of IE) require JSONP to work cross domain
// EnableJSONP = true
};
// Run the SignalR pipeline. We're not using MapSignalR
// since this branch already runs under the "/signalr"
// path.
map.RunSignalR(hubConfiguration);
});
有关Cors/JSONP支持的信息可在以下位置找到:响应状态500(内部服务器错误)与中心的OnConnectiond方法中的空引用有关。我能用小提琴手弄明白 您是否手动将
jQuery.support.cors
设置为true?如果手动将jQuery设置为接受cors,它将导致SignalR失败否,我还没有这样做。谢谢。您能否连接到start().fail()
promise和console.log(arguments)
?如果您有权访问服务器端调试,那么可能值得重写服务器上的onConnected
函数并检查HttpContext
对象,要查看服务器是否真的返回了正确的headersJay,感谢您的评论。start().fail()给出错误:启动请求期间出错。正在停止连接。顺便说一句,希望你已经看到了我添加的最新控制台截图。如果我发现没有从服务器发送正确的头,我能做些什么吗?在服务器端,我已经用一行额外的代码完成了,比如启用JSON:var hubConfiguration=new hubConfiguration{//您可以通过取消注释下面的行来启用JSONP。//JSONP请求是不安全的,但是一些较旧的浏览器(以及一些//版本的IE)需要JSONP跨域工作启用JSONP=true};您是否在web配置文件中启用了它?并在注册路由时将其设置为允许?我建议首先使用AJAX测试cors是否在您的signalR实现之外工作,然后您可以缩小问题所在的范围,谢谢您的时间。正如我前面提到的,我能够连接并调用服务器方法由于我没有尝试订阅client methods.Jay,所以我已经删除了EnableJSONP=true