javascript - SignalR - connection.start 失败
问题描述
我尝试从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 中的一个条目)
解决方案
请注意这部分代码...
const options = {
accessTokenFactory: () => info.accessKey
};
const connection = new signalR.HubConnectionBuilder()
.withUrl(info.url, options)
.configureLogging(signalR.LogLevel.Trace)
.build();
改变
=> info.accessKey
并插入
=> info.accessToken
由于未定义的值,连接失败!
推荐阅读
- jackson - 为什么 RestAssured 会抛出异常:“java.lang.IllegalArgumentException:无法使用映射器 JACKSON1 映射响应正文 ...”?
- java - 桥接模式使用和结构设计模式
- javascript - 如何从我的数据库中获取数据并将其显示在我网页上的表格中
- http - websocket 消息总是会一次全部到达吗?
- c++ - c++ string::compare() fn 的意外行为
- excel - GOOGLE APPS SCRIPT - 如何将 excel 文件覆盖到修复 ID google sheet
- angular - 服务获取数据后 ngOnInit 内属性的单元测试分配
- python - 是否可以跨多个文件拆分 Discord.py 机器人?
- microsoft-graph-api - Graph API - 仅传递成员用户和扩展管理器
- python - 根据列列表和值列表过滤 Pandas 数据框