SignalR似乎没有使用我在尝试连接时提供的根路径

时间:2015-11-20 19:06:21

标签: sockets proxy signalr signalr-hub signalr.client

我的SignalR服务器正在侦听以下网址:

http://staging.myserver.com/socket/signalr

我在本地进行了测试,但是当我部署时,我正在运行NGINX代理(因此/socket/

当它尝试连接到已部署的SignalR服务器时,它失败了,我可以看到它正在尝试使用省略了/socket/的URL进行连接。

我曾尝试调试以查看是否存在除了基本网址之外的所有内容并且附加/signalr但我似乎无法找到任何内容的运动。

我能够点击以下网址,看到我的中心完全正常。

http://staging.myserver.com/socket/signalr/hubs

我只是不知道为什么在尝试连接时会从网址中省略/socket

这或多或少是我所拥有的一个例子

var connection = $.hubConnection('http://staging.myserver.com/socket/signalr');
        var contosoChatHubProxy = connection.createHubProxy('contosoChatHub');
    contosoChatHubProxy.on('addContosoChatMessageToPage', function(name, message) {
        console.log(name + ' ' + message);
    });
    connection.start().done(function() {
            //blah blah
        });

我可以看到它在第一次初始化连接时采用了正确的URL,但在某个地方,它默认返回

http://staging.myserver.com/signalr

我能够绕过它的唯一方法是在我的NGINX代理上向/添加一个附加代理。这不是能够坚持的东西所以我需要弄明白。

1 个答案:

答案 0 :(得分:0)

请参阅GitHub问题#3649#3287,它们描述了同样的问题,并提供了一些特定于IIS的指针,说明如何将响应中的内容转换为连接协商以重新写入URL属性。看来服务器响应中的URL用于在客户端设置一个名为appRelativeUrl的局部变量,用于后续交互。所以另一个不太可口的解决方法是使用app.MapSignalR("/socket/signalr", hubConfiguration);修改/配置SignalR服务器,但我没有走这条路来看它是否会引起其他问题。