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

代理环境下带ServiceBusTrigger的Azure Function无法运行问题咨询

可行解决方案

方案1:通过全局环境变量配置代理

ServiceBusTrigger 底层依赖的 Azure.Messaging.ServiceBus SDK 会自动读取系统/应用的全局代理环境变量,你可以直接在Azure Functions应用的配置(或本地运行的local.settings.json)中添加以下变量:

  • HTTP_PROXY:HTTP请求的代理地址,格式为 http://[用户名:密码@]代理IP:端口
  • HTTPS_PROXY:HTTPS请求的代理地址,格式同上
  • NO_PROXY:配置不需要走代理的地址,可填写本地地址、内部服务地址

本地运行时,也可以直接在操作系统层面配置上述环境变量,重启函数运行时即可生效。

方案2:自定义注入带代理配置的ServiceBusClient

针对 Microsoft.Azure.WebJobs.Extensions.ServiceBus 5.0.0及以上版本的扩展,你可以手动注册带代理参数的ServiceBusClient实例,触发器会自动复用该实例无需额外修改触发逻辑:

进程内模型(In-Process)配置示例

在项目的Startup.cs中添加如下注册逻辑:

using Azure.Messaging.ServiceBus;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using System.Net;

[assembly: FunctionsStartup(typeof(YourNamespace.Startup))]
namespace YourNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var proxy = new WebProxy
            {
                Address = new Uri("http://你的代理地址:端口"),
                BypassProxyOnLocal = true,
                // 如需代理身份验证则添加以下配置
                Credentials = new NetworkCredential("代理用户名", "代理密码")
            };

            var serviceBusClientOptions = new ServiceBusClientOptions
            {
                TransportType = ServiceBusTransportType.AmqpWebSockets, // 建议用WebSockets协议适配代理环境
                WebProxy = proxy
            };

            builder.Services.AddSingleton<ServiceBusClient>(sp => 
                new ServiceBusClient("你的ServiceBus连接字符串", serviceBusClientOptions));
        }
    }
}

隔离进程模型(Isolated Worker)配置示例

在Program.cs中添加如下注册逻辑:

using Azure.Messaging.ServiceBus;
using Microsoft.Extensions.Hosting;
using System.Net;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(services =>
    {
        var proxy = new WebProxy
        {
            Address = new Uri("http://你的代理地址:端口"),
            BypassProxyOnLocal = true,
            Credentials = new NetworkCredential("代理用户名", "代理密码")
        };

        var serviceBusClientOptions = new ServiceBusClientOptions
        {
            TransportType = ServiceBusTransportType.AmqpWebSockets,
            WebProxy = proxy
        };

        services.AddSingleton<ServiceBusClient>(sp => 
            new ServiceBusClient("你的ServiceBus连接字符串", serviceBusClientOptions));
    })
    .Build();

host.Run();

方案3:传输协议适配

如果代理禁用了AMQP默认端口5671,可强制ServiceBus使用基于443端口的AMQP over WebSockets协议,除了上述代码中配置TransportType = ServiceBusTransportType.AmqpWebSockets外,也可以直接在ServiceBus连接字符串末尾添加TransportType=AmqpWebSockets参数,无需修改代码即可生效。

验证注意事项

  • 需确保代理规则已放行Service Bus服务的出站请求
  • 如果你使用的是低于5.0.0版本的ServiceBus扩展,需先升级到最新稳定版,旧版本不支持代理自定义配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:06