【问题标题】:SignalR fails to connect to server using WebSocket on ChromeSignalR 无法在 Chrome 上使用 WebSocket 连接到服务器
【发布时间】:2017-02-14 07:23:38
【问题描述】:

我正在使用jquery.signalR-2.2.0.js 进行信号连接。

我有以下代码

    var connection = $.hubConnection();
    var proxy = connection.createHubProxy(hubName);

    connection.qs = { 'groupId': groupId };
    proxy.on('connected', function () { });

    connection.logging = true;
    connection.stop();

    connection.transportConnectTimeout = 5000;

    connection.start({ transport: ['webSockets', 'longPolling'] }).done(function () {
        console.log("Connected, transport = " + connection.transport.name);
    })
    .fail(function () { console.log('Could not Connect!'); });

现在当我使用域名通过 chrome 访问我的网站时出现以下错误:

的WebSocket为“WS连接:// XYZ / signalr /连接运输=的WebSockets&clientProtocol = 1.5&的groupId = 0011600003&connectionToken = nzZP7FOeqXGWVO9gqRZJI3Kl6NBBV%2FSXdgFWR7hvnsNooMr6Qh6vc7YOMzl%2Bb8ExCssRESg4et5mjJ1pQ%2BB%2BMFPy4nu0aMw9kI7pBzOSTLjzQXLlEVe%2FIqdHj%2Bd7sYpd8nGwA7tMaPBHYxpTt7%2FvbA%3D%3D&connectionData =%5B%7B %22name%22%3A%22spotterenhancementhub%22%7D%5D&tid=3' 失败:HTTP 身份验证失败;没有可用的有效凭据start @ jquery.signalR-2.2.0.min.js:8start @ jquery.signalR-2.2.0.min.js:8d @ jquery.signalR-2.2.0.min.js:8success @ jquery.signalR -2.2.0.min.js:8i @jquery-2.2.3.min.js:2fireWith @jquery-2.2.3.min.js:2z @jquery-2.2.3.min.js:4(匿名函数) @ jquery-2.2.3.min.js:4 jquery.signalR-2.2.0.min.js:8

[14:02:22 GMT-0400(东部夏令时间)] SignalR:Websocket 已关闭。 jquery.signalR-2.2.0.min.js:8

[14:02:22 GMT-0400(东部夏令时间)] SignalR:关闭 Websocket。 jquery.signalR-2.2.0.min.js:8

[14:02:22 GMT-0400(东部夏令时间)] SignalR:webSockets 传输连接失败。试图后退。 jquery.signalR-2.2.0.min.js:8

[14:02:22 GMT-0400(东部夏令时间)] SignalR:longPolling 传输开始。

此外,这可以通过 Firefox 与服务器和域名完美配合。唯一的问题在于 Chrome 和域名。

注意:我正在使用 AD - windows 身份验证

操作系统:Windows 10

【问题讨论】:

  • 如果您使用的是 IIS - 您是否启用了 websockets?我相信它们默认是禁用的。
  • 已经启用。实际上,当我使用服务器名称访问网站时,它运行良好,但是当我使用服务器的代理名称时,它就失败了。
  • 代理是否支持 websockets,如果支持,是否配置正确?
  • 这似乎是 chrome 问题。有趣的是,如果您使用计算机名称,则它适用于 windows7 + chrome,但不适用于 windows 10 + chrome

标签: javascript jquery google-chrome websocket signalr


【解决方案1】:

我遇到了类似的问题。在客户端和服务器上使用 SignalR 2.2.2,消息突然停止通过。客户端或服务器上都没有错误。只是无声的失败。事实证明,当我的页面通过 https 加载时,SignalR 也必须通过安全连接。在本地测试时,我会为我的网站使用http://localhost,然后它必须通过不安全的连接连接到 SignalR。

所以现在我有两个配置文件,LOCAL.js 和 PROD.js。它们内部是一行代码,指示要使用的适当 SignalR 端点。环境变量确定启动 Web 服务器时加载哪个文件。

此外,我可以让 SignalR 客户端确定最佳连接方法。它适用于 Chrome、Firefox、Safari 和 IE。祝你好运!

【讨论】:

    【解决方案2】:

    我在 Chrome 中遇到了奇怪的错误,但它们只发生在我的网站通过 http 提供服务时;您的错误表明这是您网站上发生的事情,因为错误中的ws:// 协议不安全。尝试通过 https 为您的网站提供服务;这应该会将您的连接升级到 wss://,并有可能解决您的 Chrome 问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 2015-10-11
      相关资源
      最近更新 更多