我尝试从 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()方法...它没有连接到服务吗?!
有人可以帮助我吗?
非常感谢!
版本:
Func(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)
(“ Me:Hallo”是CosmosDB中的条目)
答案 0 :(得分:1)
请注意代码的这一部分...
const options = {
accessTokenFactory: () => info.accessKey
};
const connection = new signalR.HubConnectionBuilder()
.withUrl(info.url, options)
.configureLogging(signalR.LogLevel.Trace)
.build();
更改
=> info.accessKey
然后插入
=> info.accessToken
由于值未定义,连接失败!