在更新到v.1.0.1(Chrome)后,SignalR在AppHarbor上获得403

时间:2013-05-07 08:56:43

标签: asp.net-mvc-4 signalr appharbor

我使用的是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

非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

我现在尝试使用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设置。