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

无法从C#连接Docker中的Azure Service Bus模拟器(404错误)

连接Docker中Azure Service Bus模拟器遇404错误

我正尝试连接运行在Docker容器中的Azure Service Bus模拟器,容器已成功启动且日志显示一切正常,也通过telnet验证了主机可连通该模拟器,但用C#应用连接时持续收到404错误,一直没找到正确的连接字符串配置方式。

模拟器Config.json中的AuthorizationRules配置

"AuthorizationRules": [
  {
    "KeyName": "RootManageSharedAccessKey",
    "PrimaryKey": "ZDVkM2UyYzUtMTVhMi00NmYwLWJjOWUtYjk5OGRkMmIwZTFh",
    "Claims": [
      "Manage",
      "Send",
      "Listen"
    ]
  }
]

注:PrimaryKey为本地测试虚构值

C#客户端代码

using Azure.Messaging.ServiceBus.Administration;
using System;
using System.Threading.Tasks;

public class Program
{
    private const string connectionString =
        "Endpoint=sb://localhost;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=ZDVkM2UyYzUtMTVhMi00NmYwLWJjOWUtYjk5OGRkMmIwZTFh;UseDevelopmentEmulator=true;";

    public static async Task Main()
    {
        var adminClient = new ServiceBusAdministrationClient(connectionString);

        try
        {
            var queues = adminClient.GetQueuesAsync();
            await foreach (var queue in queues)
            {
                Console.WriteLine($"Queue: {queue.Name}");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Failed to list queues: {ex.Message}");
        }
    }
}

错误信息

运行程序时持续返回404错误,模拟器运行正常且端口连通,问题大概率出在连接字符串或客户端配置上。

已尝试操作

  • 检查模拟器Config.json中的AuthorizationRules配置;
  • 确认连接字符串格式,但仍报错;
  • 验证模拟器端口正确性,通过telnet确认主机可连通。

解决方案建议

1. 修正连接字符串的端点配置

当使用Docker部署的Azure Service Bus模拟器时,Endpoint需要指定容器映射的HTTP端口而非默认的SB协议端口。模拟器默认的HTTP端口是8080,同时要去掉仅适用于Windows本地模拟器的UseDevelopmentEmulator=true参数,正确的连接字符串应为:

Endpoint=http://localhost:8080;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=ZDVkM2UyYzUtMTVhMi00NmYwLWJjOWUtYjk5OGRkMmIwZTFh;

2. 验证Docker端口映射

确保启动容器时已正确映射端口,比如:

docker run -d -p 5672:5672 -p 8080:8080 mcr.microsoft.com/azure-service-bus-emulator

其中8080是HTTP管理端口,客户端执行队列管理等操作依赖该端口;5672是AMQP协议端口,用于消息收发。

3. 检查模拟器的配置端口

如果修改过模拟器的默认端口,需要在连接字符串中对应调整。可以进入容器查看Config.json文件确认端口配置,确保连接字符串中的端口与模拟器实际监听的端口一致。

4. 用基础客户端测试连通性

先尝试用消息发送/接收客户端测试,排除管理客户端的特殊问题:

using Azure.Messaging.ServiceBus;

public static async Task TestSend()
{
    var connectionString = "Endpoint=http://localhost:8080;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=ZDVkM2UyYzUtMTVhMi00NmYwLWJjOWUtYjk5OGRkMmIwZTFh;";
    await using var client = new ServiceBusClient(connectionString);
    var sender = client.CreateSender("test-queue");
    await sender.SendMessageAsync(new ServiceBusMessage("Hello"));
}

如果这个测试成功,说明连接字符串没问题,问题可能出在管理客户端的权限或模拟器的管理API配置上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:22:47