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 for SignalR ,正如Jay在下面指出的那样。它是一个带有WebAPI控制器的 MVC应用程序。
请帮忙!
答案 0 :(得分:2)
响应状态500(内部服务器错误)是关于集线器的OnConnected方法中的空引用。能够使用提琴手来解决这个问题。
答案 1 :(得分:1)
在前端,确保您不设置cors支持
jQuery.support.cors = true //Do not put this
在服务器上,在启动类中,通过添加:
确保允许使用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支持的信息,请访问:asp net