我使用的是 SignalR v.1.0.0 RC2,它工作得很好。当我升级到 v.1.0.1 时,它停止工作。当我尝试调用集线器上的方法时,现在收到 403(禁止)。我没有更改任何代码 - 我只更新到了 SignalR 的新版本。需要注意的是,当我在本地运行它时,我没有任何问题 - 仅当我在 AppHarbor 上运行它时,并且仅在 Chrome 浏览器中运行它时。它适用于 IE 10 和 Firefox 20。
我知道SignalR的新版本已经做了一些授权方面的工作。现在,您可以在集线器或集线器方法上添加授权属性。我想这样做,但首先我希望它能够在没有 - 就像以前那样的情况下工作。
这是我的中心:
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
public class ReceptionHub : Hub
{
public Task Join(string group)
{
return Groups.Add(Context.ConnectionId, group);
}
}
这是客户端站点脚本(我从标记中的数据属性获取组):
$(function () {
var receptionHub = $.connection.receptionHub;
receptionHub.client.updateStatusBar = function (checkedIn, checkedOut, preRegistered)
{
$('#quantityCheckedInToday').html(checkedIn);
$('#quantityCheckedOutToday').html(checkedOut);
$('#quantityPreRegistered').html(preRegistered);
};
$.connection.hub.start().done(function () {
var group = $("#statusBar").data("group");
receptionHub.server.join(group);
});
});
我的本地设置和 AppHarbor 上的设置之间的一个区别是我在 HTTPS 上运行 AppHarbor 站点,但这之前不是问题。此外,AppHarbor 上的服务器前面有一个负载均衡器。
失败的请求是对此 URL 的 POST 请求:
/signalr/send?transport=serverSentEvents&connectionToken=5hSSl7wSPrkD51cmPNw-JCrrdxMn2qOgEgmKt5gKrE4jigE4Sxha3gALHREcyDslqb7xjY9fP8rTMpslKuBJzBCIi-q86ZmHt66xhqi2eioAtvQCO03XlcR0Dq9-RW5G0
非常感谢任何帮助
最佳答案
我现在尝试使用 SignalR 1.1.2 - 它仍然无法在 Chrome 中工作,但这次它给出了更好的错误消息。它说 CORS 已关闭。我尝试在配置中打开 CORS:
var config = new HubConfiguration
{
EnableCrossDomain = true
};
// Register the default hubs route: ~/signalr
RouteTable.Routes.MapHubs(config);
这解决了我遇到的问题,现在它可以在 Chrome 中再次运行。我不确定为什么需要打开 CORS 才能使其在 Chrome 中工作...也许需要一些特殊的 AppHarbor 设置。
关于asp.net-mvc-4 - 更新到 v.1.0.1 后 SignalR 在 AppHarbor 上收到 403 (Chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415041/