【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
问题描述
在 C# Azure Function使用 Service Bus 作为触发器时候,在C# 独立工作模式下,说可以支持使用 ServiceBusReceivedMessage 类型作为触发消息的参数类型:
[Function(nameof(ServiceBusReceivedMessageFunction))] [ServiceBusOutput("outputQueue", Connection = "ServiceBusConnection")] public string ServiceBusReceivedMessageFunction( [ServiceBusTrigger("queue", Connection = "ServiceBusConnection")] ServiceBusReceivedMessage message) { _logger.LogInformation("Message ID: {id}", message.MessageId); _logger.LogInformation("Message Body: {body}", message.Body); _logger.LogInformation("Message Content-Type: {contentType}", message.ContentType); var outputMessage = $"Output message created at {DateTime.Now}"; return outputMessage; }
但是在实际的测试中,却报错:
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
Error:System.NotSupportedException:
Deserialization of types without a parameterless constructor, a singular parameterized constructor, or a parameterized constructor annotated with 'JsonConstructorAttribute' is not supported.
Type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage'.
Path: $ | LineNumber: 0 | BytePositionInLine: 1.
问题解答
这是 Azure Functions 基础结构的限制而导致的行为。由于ServiceBusReceivedMessage 类型无法反序列化为JSON 类型.
所以,可以使用 [string message] 来代替 [ServiceBusReceivedMessage message].
[Function(nameof(ServiceBusReceivedMessageFunction))] [ServiceBusOutput("outputQueue", Connection = "ServiceBusConnection")] public string ServiceBusReceivedMessageFunction( [ServiceBusTrigger("queue", Connection = "ServiceBusConnection")] string message) { _logger.LogInformation("Message Body: {body}", message);
var outputMessage = $"Output message created at {DateTime.Now}"; return outputMessage; }
参考资料
Azure Functions 的 Azure 服务总线触发器 : https://docs.azure.cn/zh-cn/azure-functions/functions-bindings-service-bus-trigger?tabs=python-v2%2Cisolated-process%2Cnodejs-v4%2Cextensionv5&pivots=programming-language-csharp#usage
ServiceBusMessageActions raises grpc exception after migrating to Isolated worker in net8.0 in servicebus trigger execution #2761 : https://github.com/Azure/azure-functions-dotnet-worker/issues/2761
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2021-01-14 【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization