415 Неподдерживаемый тип носителя в функции Azure -> Сообщение службы SignalR

Я пытаюсь отправить сообщение из функции Azure в службу Azure SignalR и возвращает 415, но не знаю, как определить причину проблемы.

У меня уже есть рабочая реализация для внешнего интерфейса приложения с пользователями и действиями, способными транслировать сообщения через службу SignalR, однако теперь мне нужна функция бэкэнда, чтобы уведомлять пользователей о завершении.

Вот пример, которому я следовал. https://github.com/Microsoft/MTC_WhackAMole.NET/blob/master/MoleDeploy.SignalR/AzureSignalR.cs

При выполнении функции она успешно завершает функцию SendAsync(), но на самом деле ничего не вызывает.

var payload = new PayloadMessage()
{
    Target = methodName,
    Arguments = args
};
var url = $"{endpoint}/api/v1/hubs/{hubName}";
var bearer = GenerateJwtBearer(null, url, null, DateTime.UtcNow.AddMinutes(30), accessKey);
await PostJsonAsync(url, payload, bearer);

Только при попытке выполнить тот же запрос в Postman я получаю ошибку 415.

В Почтальоне я отправляю по следующему адресу;

https://xxxxxx.service.signalr.net/api/v1/hubs/{hubName}

Использование токена аутентификации на предъявителя (я знаю, что это правильно, так как при его изменении генерируется 401, а не 415)

Это отправляет следующую полезную нагрузку;

{"Target":"hubFunctionName","Arguments":"message to broadcast"}

В чем я не совсем уверен, так это в опубликованном теле. Должна ли цель быть функцией в хабе, а аргументы - сообщением для отправки?

Если посмотреть на полезную нагрузку, отправляемую в PostJsonAsync(), то получается:

payload {AzureFunctionName.AzureSignalR.PayloadMessage}
--Arguments {object[1]}
----[0] "message to broadcast"
--Target    "hubFunctionName"

Функция в хабе супер базовая;

public void Send(string messageText)
{
    Clients.All.broadcastMessage(messageText);
}

Если бы кто-то мог указать мне правильное направление с этим, это было бы очень ценно.

Спасибо том

2 ответа

Спасибо за ответ - я все еще изо всех сил пытаюсь понять функциональность этого, я думаю.

Для расширения у меня есть базовая функция Azure, которая читает из очереди, и она мне нужна, чтобы получить сообщение для моей службы сигнализации.

Прочитанная очередь прямолинейна (и работает)

public static void Run([QueueTrigger("signalr-messages", Connection = "Azure.Storage.Main")]string myQueueItem, ILogger log)
{
    <Deserialise>
    SendMessage(message, null);
}

Моя функция SendMessage выглядит так;

public static Task SendMessage(Message message, [SignalR(HubName = "baseHub")]IAsyncCollector<SignalRMessage> signalRMessages)
{
    return signalRMessages.AddAsync(
    new SignalRMessage
      {
        Target = "sendMessage",
        Arguments = new[] { message }
      });
}

Я передаю "ноль" в SendMessage, однако я знаю, что это неправильно - примеры, которые я могу найти, приходят от триггеров HTTP, а не от триггеров очереди

Я даже иду по правильному пути с этим?

Основываясь на документах, я считаю, arguments должен быть массив сообщений для отправки вместо. Не могли бы вы подтвердить, что вы тестируете то же самое в Почтальоне?

Кроме того, вместо того, чтобы писать этот код самостоятельно, функции Azure v2 имеют привязку вывода службы Azure SignalR, которую можно использовать напрямую.

Другие вопросы по тегам