【问题标题】:Azure Function SignalR Negotiate function works but Send function failsAzure Function SignalR Negotiate 功能有效,但发送功能失败
【发布时间】:2019-06-22 17:43:41
【问题描述】:

我有一个 xamarin 应用程序试图在 Azure 函数中使用 SignalR。

根据文档,我有 2 个 azure 函数。

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")] 中遇到断点,并且什么也没有发生。它也没有给我任何例外。

本地设置是这样的

更新

我也尝试过调用。它没有用。

我应该尝试对 [FunctionName("Send")] 进行 POST 调用吗?

【问题讨论】:

    标签: xamarin.forms signalr azure-functions azure-signalr


    【解决方案1】:

    SignalR SaaS 在 Functions 中的工作方式与在 .NET 应用程序中使用 NuGet 包略有不同。

    您不能使用 SignalR 库调用函数,正如您在函数中的属性上看到的那样,它需要 Http 触发器,因此您有向此端点执行 POST,而不是像往常一样调用它。

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

    您仍然想正常收听 Send 目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2021-10-05
      • 2021-06-23
      相关资源
      最近更新 更多