Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SignalR跨域javascript客户端集线器启动方法仅在订阅客户端方法时失败_Javascript_Signalr - Fatal编程技术网

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

SignalR跨域javascript客户端集线器启动方法仅在订阅客户端方法时失败。如果未订阅客户端方法,将成功调用集线器启动,并成功调用服务器方法

$.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