【问题标题】:SignalR - connection.start failedSignalR - connection.start 失败
【发布时间】:2018-11-21 16:38:53
【问题描述】:

我尝试运行 Anthony Chu 的教程。 https://www.youtube.com/watch?v=4d0wor7uAgQ

他使用 Azure CosmosDB、Azure Functions 和 SignalR 实现了一个“SimpleChat-Application”。您可以在其中实时在客户端之间发送消息。 我尝试了不同的设置和版本,但无法正常工作。

我的“index.html”中的源代码:(JavaScript)

  <script src="https://unpkg.com/@aspnet/signalr@1.0.0-rc1-final/dist/browser/signalr.js"></script>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  
  <script>
    const apiBaseUrl = 'http://localhost:7071';
    const hubName = 'chat';
    getConnectionInfo().then(info => {      
      let username;
      while (!username && username !== null) {
        username = prompt('Enter a username');
      }
      console.log(info.accessTokenFactory);
      if (username === null) return;
      document.body.classList.add('ready');
      const messageForm = document.getElementById('message-form');
      const messageBox = document.getElementById('message-box');
      const messages = document.getElementById('messages');
      const options = {
        accessTokenFactory: () => info.accessKey
      };

      const connection = new signalR.HubConnectionBuilder()
        .withUrl(info.url, options)
        .configureLogging(signalR.LogLevel.Trace)
        .build();

      connection.onclose(() => console.log('disconnected'));

      console.log('retrieving messages');

      getMessage().then(messages => {
        for(let m of messages) {
          newMessage(m);
        }
        console.log('connecting...');
        connection.start()
          .then(() => console.log('connected!'))
          .catch(console.error);
      });
      console.log('connected after');
    }).catch(alert);
    
    function getConnectionInfo() {
      console.log("test");
      return axios.post(`${apiBaseUrl}/api/negotiate`)
        .then(resp => resp.data);
    }

    function getMessage(sender, messageText) {
      return axios.get(`${apiBaseUrl}/api/getmessage`).then(resp => resp.data);
    }

    function newMessage(message) {
      const newMessage = document.createElement('li');
      newMessage.appendChild(document.createTextNode(`${message.sender}: ${message.text}`));
      messages.prepend(newMessage);
    }
  </script>

源代码(协商 - function.json)

{
  "disabled": false,
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    },
    {
      "type": "signalRConnectionInfo",
      "name": "connectionInfo",
      "hubName": "chat",
      "connectionStringSetting": "AzureSignalRConnectionString", 
      "direction": "in"
    }
  ]
}

源代码(协商 - index.js)

module.exports = function (context, req, connectionInfo) {
    context.res = { body: connectionInfo };
    context.done();
}

我可以从 cosmosDB 接收数据,但是当我使用 connection.start() 方法时...它没有连接到服务?!

谁能帮帮我?

非常感谢!!!

版本:

  • 函数(2.2.70)

  • Microsoft.Azure.WebJobs.Extensions.SignalRService (1.0.0-preview1-10002)

  • Microsoft.Azure.WebJobs.Extensions.CosmosDB (3.0.2)

  • Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator (1.0.1)

(“我:你好”是 CosmosDB 中的一个条目)

Result Page with Console-Log

【问题讨论】:

    标签: javascript azure signalr azure-functions


    【解决方案1】:

    请注意这部分代码...

          const options = {
            accessTokenFactory: () => info.accessKey
          };
    
          const connection = new signalR.HubConnectionBuilder()
            .withUrl(info.url, options)
            .configureLogging(signalR.LogLevel.Trace)
            .build();
    

    改变

    => info.accessKey
    

    插入

    => info.accessToken
    

    连接失败,因为未定义的值!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-11
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多