本地运行带NService Bus服务总线触发器的Azure Function测试问题
解决方法
1. 修正请求负载格式
你之前给input加了/{my escaped event object}/的包裹格式,这会让消息体被识别成纯字符串而非JSON对象。直接传入MyEvent的原始JSON结构即可:
{ "input": { "YourEventProperty1": "对应值", "YourEventProperty2": 12345 } }
2. 补全NServiceBus必需的请求头
除了NServiceBus.EnclosedMessageTypes,还要添加匹配序列化器的内容类型头,以及事件场景下的消息意图头:
Content-Type: application/json NServiceBus.EnclosedMessageTypes: Namespace.Models.MyEvent NServiceBus.ContentType: application/json NServiceBus.MessageIntent: Publish
3. 确保序列化器配置正确
在Azure函数的NServiceBus端点配置里,要明确把MyEvent加入序列化器的已知类型列表,避免类型推断失败:
var serializer = new SystemTextJsonSerializer(); serializer.AddKnownType(typeof(Namespace.Models.MyEvent)); endpointConfiguration.UseSerialization(serializer);
4. 直接模拟完整服务总线消息(备选方案)
如果上述方法仍有问题,可以直接构造服务总线Message对象的结构传入,把消息体转成Base64编码,NServiceBus的头信息放在UserProperties里:
{ "input": { "Body": "这里替换成你的MyEvent对象JSON字符串的Base64编码", "ContentType": "application/json", "MessageId": "任意唯一ID", "UserProperties": { "NServiceBus.EnclosedMessageTypes": "Namespace.Models.MyEvent", "NServiceBus.MessageIntent": "Publish" } } }
内容的提问来源于stack exchange,提问作者JDBennett
相关产品推荐
相关产品推荐

