You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#脚本Azure Function中使用ServiceBus Message类型作为输出参数时的引用缺失问题

解决Azure Function C#脚本中ServiceBus Message类型引用问题

我来帮你搞定这个问题!你遇到的错误是因为Message类型属于Microsoft.Azure.ServiceBus命名空间,这个程序集并没有默认被Azure Functions的C#脚本(.csx)环境包含,所以需要显式添加程序集引用和命名空间导入。

步骤1:添加正确的程序集引用

在你的.csx代码最顶部,添加指定稳定版本的NuGet包引用(这里以旧版SDK的常用稳定版5.2.0为例):

#r "nuget: Microsoft.Azure.ServiceBus, 5.2.0"

步骤2:导入对应的命名空间

在using指令区域添加命名空间导入:

using Microsoft.Azure.ServiceBus;

步骤3:修改函数代码使用Message类型

现在你可以正常创建Message实例、设置To等元数据,再添加到ICollector<Message>中。完整示例代码如下:

#r "Newtonsoft.Json"
#r "nuget: Microsoft.Azure.ServiceBus, 5.2.0"

using System.Net;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Microsoft.Azure.ServiceBus;

public static async Task<IActionResult> Run(HttpRequest req, ICollector<Message> outputSbMsg, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    // 读取请求体并创建ServiceBus消息
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    var messageBytes = Encoding.UTF8.GetBytes(requestBody);
    var sbMessage = new Message(messageBytes)
    {
        To = "target-subscription-name", // 设置目标订阅的To元数据
        MessageId = Guid.NewGuid().ToString() // 可选:设置唯一消息ID
    };

    // 将消息传入ServiceBus输出绑定
    outputSbMsg.Add(sbMessage);

    return new OkObjectResult("Message sent to Service Bus Topic with metadata successfully!");
}

额外说明

  • 如果你的Azure Functions运行时是v3及以上,也可以选择使用新版Azure Service Bus SDK(Azure.Messaging.ServiceBus),对应的消息类型是ServiceBusMessage。引用方式为:
    #r "nuget: Azure.Messaging.ServiceBus, 7.17.0"
    
    导入命名空间using Azure.Messaging.ServiceBus;后,ServiceBusMessage的To字段用法和旧版Message一致。
  • 你的function.json配置无需修改,serviceBus类型的输出绑定同时支持旧版Message和新版ServiceBusMessage类型。

内容的提问来源于stack exchange,提问作者Figar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:37:36