Azure Function SignalR Negotiate 函数有效但 Send 函数失败
Azure Function SignalR Negotiate function works but Send function fails
我有一个 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 = "";
}
连接代码工作正常,它命中 "negotiate" 函数,但是当我调用 SendAsync 时,它没有命中 [FunctionName("Send")] 中的断点,并且没有任何反应。它也不给我任何例外。
本地设置是这样的
更新
我也试过Invoke。它没有用。
我应该尝试 POST 调用 [FunctionName("Send")] 吗?
SignalR SaaS 在 Functions 中的工作方式与在 .NET 应用程序中使用 NuGet 包略有不同。
您不能使用 SignalR 库调用函数,正如您在函数的属性上看到的那样,它需要一个 Http
触发器,因此您必须对该端点执行 POST 而不是像往常一样调用它。
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]
您仍想正常收听 Send
目标。
我有一个 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 = "";
}
连接代码工作正常,它命中 "negotiate" 函数,但是当我调用 SendAsync 时,它没有命中 [FunctionName("Send")] 中的断点,并且没有任何反应。它也不给我任何例外。
本地设置是这样的
更新
我也试过Invoke。它没有用。
我应该尝试 POST 调用 [FunctionName("Send")] 吗?
SignalR SaaS 在 Functions 中的工作方式与在 .NET 应用程序中使用 NuGet 包略有不同。
您不能使用 SignalR 库调用函数,正如您在函数的属性上看到的那样,它需要一个 Http
触发器,因此您必须对该端点执行 POST 而不是像往常一样调用它。
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]
您仍想正常收听 Send
目标。