Функция Azure SignalR Функция согласования работает, но функция отправки не работает - PullRequest
0 голосов
/ 22 июня 2019

У меня есть приложение xamarin, которое пытается поговорить об использовании SignalR в функциях Azure.

У меня есть 2 функции лазури согласно документации.

public static class NegotiateFunction
{
    [FunctionName("negotiate")]
    public static SignalRConnectionInfo GetSignalRInfo(
         [HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
         [SignalRConnectionInfo(HubName = "chat")] SignalRConnectionInfo connectionInfo)
    //, UserId = "{headers.x-ms-client-principal-id}"
    {
        return connectionInfo;
    }
}

и

  public static class SendMessageFunction
{
    [FunctionName("Send")]
    public static Task SendMessage(
    [HttpTrigger(AuthorizationLevel.Anonymous, "post")]object message,
[SignalR(HubName = "chat")]IAsyncCollector<SignalRMessage> signalRMessages)
    {
       // var chatObj = (ChatObject)(message);

        return signalRMessages.AddAsync(
        new SignalRMessage
        {
                // the message will only be sent to this user ID
             //   UserId = chatObj.ReciversId,
            Target = "Send",
            Arguments = new[] { message }
        });
    }
}

в моем клиенте xamarin я подключаюсь вот так.

 try
            {
                _connection = new HubConnectionBuilder()
                   .WithUrl("http://192.168.1.66:7071/api")
                    .Build();

                _connection.On<string>("Send", (message) =>
                {
                    AppendMessage(message);
                });

                await _connection.StartAsync();
            }

Я отправляю сообщение с помощью этого кода на одной из страниц приложения Xamarin.

 try
        {
            await _connection.SendAsync("Send", MessageEntry.Text);
            MessageEntry.Text = "";
        }

код соединения работает, он правильно выполняет функцию «согласовать», но когда я вызываю SendAsync, он не достигает точки останова в [FunctionName («Send»)] и ничего не происходит.Это также не дает мне никаких исключений.

локальные настройки такие же

enter image description here

Обновление

Я также попробовал Invoke.это не сработало.

Должен ли я попытаться сделать POST-вызов [FunctionName ("Send")]?

1 Ответ

0 голосов
/ 25 июня 2019

Способ работы SignalR SaaS в функциях несколько отличается от использования пакета NuGet в приложении .NET.

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

[HttpTrigger(AuthorizationLevel.Anonymous, "post")]

Вы все еще хотите прослушать цель Send как обычно.

...