【问题标题】:SignalR seems to not be using the root path that I give it when trying to connectSignalR 似乎没有使用我在尝试连接时提供的根路径
【发布时间】:2015-11-20 19:06:21
【问题描述】:

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

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

我在本地进行了测试并且它可以工作,但是当我部署时,我正在通过 NGINX 代理运行(因此/socket/

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

我尝试调试以查看是否有一项运动会删除除基本 url 之外的所有内容并附加 /signalr,但我似乎找不到任何内容。

我可以点击以下 URL 并完美地查看我的集线器。

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 代理上向/ 添加一个附加代理。这不是可以坚持的东西,所以我需要弄清楚。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2015-08-26
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多