无法关闭防火墙时本地运行Timer Trigger Azure Function报错如何解决
本地运行Timer Trigger Azure Function防火墙拦截报错解决方案
以下方案均不需要关闭整机防火墙:
- 关闭定时器持久化监控(最简单适配本地开发的方案)
Timer Trigger默认会开启调度状态持久化,需要依赖Blob存储记录触发记录,关闭该特性即可跳过存储依赖,不会影响本地调试的定时触发逻辑。
修改触发器特性代码,添加UseMonitor = false参数:
[FunctionName("Function1")] public static void Run([TimerTrigger("*/12 * * * * *", UseMonitor = false)]TimerInfo myTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); }
同步修改项目根目录下的local.settings.json配置文件,Values节点下添加或修改配置:
"AzureWebJobsStorage": "None"
注:该配置仅适用于本地开发环境,生产环境部署时需要还原为真实的存储连接字符串。
放行本地存储仿真器的专属端口
如果需要保留定时器持久化特性,仅需要在防火墙中添加本地回环端口放行规则,不需要关闭整机防火墙:
在Windows Defender防火墙高级设置中添加入站规则,放行TCP端口10000、10001、10002,规则作用域设置为仅允许127.0.0.1地址访问即可,该规则仅放行本地Azurite存储仿真器的内部流量,无对外安全风险。修改本地存储连接字符串使用固定回环地址
部分防火墙会拦截localhost域名解析请求,可将local.settings.json中的AzureWebJobsStorage配置替换为直接使用127.0.0.1的完整连接字符串:
"AzureWebJobsStorage": "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;"
修改完成后重新启动Azure Function本地运行即可恢复正常。
内容的提问来源于stack exchange,提问作者Nandan Acharya
相关产品推荐
相关产品推荐

