【发布时间】:2021-08-11 09:44:48
【问题描述】:
我正在构建一个基于无服务器架构的应用程序。我卡住的部分包括:SPA Web UI、C# .Net 5.0 隔离进程函数(dotnet-isolated)、Azure SignalR Service(无服务器模式)。
有很多文档和示例如何使用我提到的相同堆栈构建不同的实时无服务器应用程序,但使用 .Net 3.1 函数。而且几乎没有关于 SignalR 触发的 .Net 5.0 隔离进程函数的 SignalR 输出绑定的信息。
唯一有用的文档如下: C#隔离进程:https://docs.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide SignalR 扩展:https://github.com/Azure/azure-functions-dotnet-worker/tree/main/samples/Extensions/SignalR
所以,那里涵盖了基础知识。但是,没有关于一些高级 SignalR 输出绑定的信息,这将有助于构建更多功能,例如:将用户添加到组,从组中删除用户。等等。
到目前为止,我能够构建和运行:协商、发送消息(对所有人、用户或组)、已连接、已断开
但我在 AddToGroup 部分苦苦挣扎......这是我的代码:
[Function(nameof(AddToGroup))]
[SignalROutput(HubName = "WebUINotifications", ConnectionStringSetting = "AzureSignalRConnectionString")]
public static OutputObject AddToGroup(
[SignalRTrigger("WebUINotifications", "messages", "AddToGroup")] string item,
FunctionContext context)
{
var logger = context.GetLogger("AddToGroup");
var signalrGroup = JsonSerializer.Deserialize<SignalRGroup>(item);
var userId = signalrGroup.UserId;
var groupName = signalrGroup.Arguments[0];
logger.LogInformation($"UserId: {userId}");
logger.LogInformation($"Group Name: {groupName}");
return new OutputObject()
{
UserId = userId,
GroupName = groupName,
};
}
在 Azure 中为 SignalR 服务配置 UpStream 设置后,我的函数被 Web UI 中的 javascript 成功触发
this.connection.invoke('AddToGroup', 'TestGroup');
但我得到了错误,这并不奇怪,因为不清楚如何精确绑定:
System.Private.CoreLib: Exception while executing function: Functions.AddToGroup. Microsoft.Azure.WebJobs.Extensions.SignalRService: Unable to convert JObject to valid output binding type, check parameters.
我错过了什么?在哪里可以找到文档?
谢谢大家!
【问题讨论】:
-
我也面临同样的问题。我到处寻找,文档似乎只是忽略了这一点。所有的代码示例都已经过时了,关于这个的问题都没有得到答案。我认为目前缺少 .net 5 azure 函数中的 SignalR 支持。
-
George 您是如何实现SendMessage(对所有人、用户或组)的?即使在这一点上,我似乎也碰壁了。
标签: azure-functions .net-5 signalr-service