Функция Azure SignalR |функция переговоров |Сбой с кодом ошибки 500 - PullRequest
0 голосов
/ 09 апреля 2019

Я установил 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 код ошибки без какой-либо подсказки.Ниже приведены примеры

run.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);
}

function.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 Payload объекта connectionInfo.Не могли бы вы помочь мне здесь?

1 Ответ

0 голосов
/ 09 апреля 2019

Я нашел ответ здесь на Serverless360 .Оказалось, тип вопроса и метод-параметр оформления.После обращения к библиотеке и декоратору SignalService он начал работать.На мой взгляд, object, являющийся базовым типом, предполагается, что он получил или был введен с помощью connectionInfo.

#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) { }

Ожидаемая полезная нагрузка была также опубликована для вашей справки.Если у вас есть какие-либо вопросы, сообщите об этом в комментариях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...