Я установил Microsoft.Azure.WebJobs.Extensions.SignalRService, используя extensions.csproj.
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<WarningsAsErrors />
</PropertyGroup>
<ItemGroup>
<PackageReference Include = "Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version = "3.0.1" />
<PackageReference Include = "Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version = "1.0.*" />
<PackageReference Include = "Microsoft.Azure.WebJobs.Extensions.SignalRService" Version = "1.0.0" />
</ItemGroup>
</Project>
Я смог публиковать сообщения через службу Azure SignalR, используя следующую функцию Azure. Функция запускается, когда в коллекциях CosmosDB выполняются какие-либо операции AddOrUpdate(), и она отправляет сигналы с именем «fruitUpdated» в концентратор.
#r "Microsoft.Azure.DocumentDB.Core"
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Microsoft.Azure.Documents;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static void Run(IReadOnlyList<Document> input, ILogger log, ICollector<SignalRMessage> signalRMessages)
{
if (input != null && input.Count > 0)
{
log.LogInformation("Documents modified " + input.Count);
foreach (var fruit in input)
{
signalRMessages.Add(
new SignalRMessage
{
Target = "fruitUpdated",
Arguments = new [] { fruit }
});
}
}
}
Но функция переговоров, похоже, сейчас не работает. Он выдает код ошибки 500 без какой-либо подсказки. Ниже приведены образцы,
запустить.csx
#r "Newtonsoft.Json"
using System;
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static IActionResult Run(HttpRequest req, ILogger log, object connectionInfo)
{
return (ActionResult)new OkObjectResult(connectionInfo);
}
функция.json
{
"bindings": [
{
"authLevel": "anonymous",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"type": "signalRConnectionInfo",
"name": "connectionInfo",
"hubName": "flights",
"direction": "in",
"connectionStringSetting": "AzureSignalRConnectionString"
}
]
}
Я пробовал все комбинации. Документация Azure в некоторых случаях утомительна! Нет схемы ввода\вывода Это должно осуждаться. Команда разработчиков Azure должна отнестись к этому серьезно
Версии SignalR несовместимы друг с другом. Они просто пассивно отклоняют сообщения, не выдавая ошибки, если мы используем разные версии dll SignalR на сервере и клиенте.
Я думаю, мне нужна полезная нагрузка JSON объекта connectionInfo. Не могли бы вы помочь мне здесь?





Я нашел ответ здесь, в Бессерверное360. Получилось типа вопрос и метод-параметр оформления. После обращения к библиотеке SignalService и декоратору он начал работать. На мой взгляд, поскольку object является базовым типом, предполагается, что он получил или был введен с помощью информации о соединении.
#r "Newtonsoft.Json"
#r "Microsoft.Azure.WebJobs.Extensions.SignalRService"
using System;
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.Azure.WebJobs.Extensions.SignalRService;
public static IActionResult Run(HttpRequest req, ILogger log, [SignalRConnectionInfo(HubName = "flights")]SignalRConnectionInfo connectionInfo)
{
return (ActionResult)new OkObjectResult(connectionInfo);
}
Теперь функция переговоров работает должным образом. Надеюсь, это поможет людям с похожими проблемами!
Пример полезной нагрузки вывода для функции согласования
{"url":"https://myazuresignalrservice.service.signalr.net/client/?hub=myhubname","accessToken":"mybeareraccesstoken"}
ОБНОВИТЬ
Проблема была с неиспользованием *[SignalRConnectionInfo(HubName = "fruits")]SignalRConnectionInfo* в подписи метода.
public static IActionResult Run(HttpRequest req, ILogger log, [SignalRConnectionInfo(HubName = "fruits")]SignalRConnectionInfo connectionInfo) { }
Ожидаемая полезная нагрузка также была опубликована для справки. Если у вас есть какие-либо вопросы, дайте мне знать в комментариях.