客户端上生成的SignalR路径不正确

时间:2016-04-13 20:09:10

标签: signalr signalr.client

所以我一直试图让SignalR与我使用OWIN和身份验证的Web Api实例一起工作。在弄清楚CORS之后(感谢SO帮助)我几乎就在那里。

我的网络客户端因控制台上的Javascript错误而失败。

http://localhost:45325/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&_=1460577212205 404 (Not Found)

如果我使用此网址并将其放入浏览器中,我会收到404错误。但是,如果我将/signalr/添加到路径中......

http://localhost:45325/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&_=1460577212205

我使用SignalR connectionid以及所有内容......

获得了正确的JSON响应
{
"Url": "/signalr",
"ConnectionToken": "<token here>",
"ConnectionId": "0bf84c7a-0a28-4da9-bb9f-551de894cf0e",
"KeepAliveTimeout": 20,
"DisconnectTimeout": 30,
"ConnectionTimeout": 110,
"TryWebSockets": true,
"ProtocolVersion": "1.5",
"TransportConnectTimeout": 5,
"LongPollDelay": 0
}

所以看起来除了客户端为连接到SignalR中心而生成的URL缺少/signalr之外,一切正常。

这是我的客户端Javascript连接到Hub。我在哪里可以指定包含/signalr的路径?因为我以为我已经是......

<script src="scripts/jquery-2.2.2.min.js"></script>
<script src="scripts/jquery.signalR-2.2.0.js"></script>
<script>
(function ($) {
    $(function () {
        var connection = $.hubConnection('/signalr/', {useDefaultPath: false});
        var myHubProxy = connection.createHubProxy('MyHub');
        myHubProxy.on('notify', function (username) {
            console.log(username + ' has logged in');
            alert(username + ' has logged in');
        });

        connection.url = 'http://localhost:45325';

        connection.start()
            .done(function() {
                alert('Connected to MyHub: Connection ID = ' + connection.id);
            })
            .fail(function(e) {
                console.log('Connection error: ' + e);
            });
    });
})(jQuery);
</script>

您可能会注意到我没有包含<script src="signalr/hubs"></script>。这是因为我自己创建了代理,而不是依赖于自动生成的代理

1 个答案:

答案 0 :(得分:1)

我明白了!对我来说应该是显而易见的......

在客户端的Javascript中,我需要添加\signalr路径...

connection.url = 'http://localhost:45325/signalr';

也许我应该在我的网站Api的public void Configuration(IAppBuilder)类中的Startup.cs方法中看到我有以下内容。

app.Map("/signalr", map =>
{
    map.UseCors(CorsOptions.AllowAll);
    var hubConfiguration = new HubConfiguration
    {
        // EnableJSONP = true;  // I am not using as CORS is working just fine
    };
    map.RunSignalR(hubConfiguration);
});

我正在指定子目录"/signalr"