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

Azure Function HTTP触发器无法被IoT设备稳定触发问题排查

问题描述

我用Shelly Motion Sensor 2触发.NET 6隔离进程运行时的匿名Azure Function HTTP触发器,但触发不稳定:

  • 本地调用http://192.168.1.83/api/ping每次都正常触发;
  • 调用云端地址http://x-y-z.azurewebsites.net/api/ping时,大部分情况无法触发,偶尔能正常工作;
  • 用Postman或curl调用云端地址每次都正常;
  • 设备同时触发Google Cloud Function、webhook.site、requestinspector.com的端点,这些服务每次都能正常响应;
  • 设备日志显示请求已完成,但Azure的Application Insights及日志大部分时候无记录;
  • 尝试让设备调用Azure App Service HTTP端点,同样未在Application Insights中留下记录;
  • 当前使用B1应用服务计划,怀疑是Azure内置防护机制阻止请求,或存在其他问题。

函数代码

[Function("Ping")]
public async Task<HttpResponseData> Ping(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "ping")] HttpRequestData request)
{
    var response = request.CreateResponse(HttpStatusCode.OK);
    await response.WriteStringAsync("pong");

    return response;
}

设备日志

1674085196.780 action_queue_process:    URL[http://a.cloudfunctions.net/ping] Connecting
1674085196.856 action_queue_process:    URL[http://webhook.site/a-b-c-d] Connecting
1674085196.989 action_queue_process:    URL[http://x-y-z.azurewebsites.net/api/ping] Connecting
1674085196.013 action_queue_process:    URL[http://a.cloudfunctions.net/ping]: Done
1674085196.027 action_queue_process:    URL[http://webhook.site/a-b-c-d]: Done
1674085196.098 action_queue_process:    URL[http://x-y-z.azurewebsites.net/api/ping]: Done

设备请求示例(来自requestinspector.com)

GET /inspect/abcxyz HTTP/1.1
requestinspector.com
Accept: */*
User-Agent: Mozilla/5.0
Accept-Encoding: gzip
问题分析与解决方案

结合你的情况,大概率是Azure的防护机制或设备请求特征导致的问题,以下是具体分析和解决思路:

1. Azure网关拦截非标准请求

从设备的请求示例可以看到,请求格式不符合HTTP规范:正常的Host头应该是Host: requestinspector.com,但示例里直接写了域名,缺少Host:前缀。Azure的HTTP网关对请求格式要求严格,这类非标准请求会被直接丢弃,不会到达函数层。

  • 检查Shelly设备的请求配置,确保它发送标准的HTTP请求头,尤其是包含正确格式的Host头;
  • 如果设备无法修改请求格式,可通过Azure API Management作为中间层,接收设备的非标准请求并转换为符合Azure要求的格式后转发给函数。

2. Web应用防火墙(WAF)或智能检测拦截

Azure App Service/Function默认启用基础智能检测规则,可能将Shelly设备的请求识别为异常流量拦截:

  • 登录Azure门户,进入Function App的网络 -> Web应用防火墙,查看是否有对应拦截记录;
  • 临时关闭WAF测试,若恢复正常,需在WAF中添加放行规则(比如按设备IP或User-Agent放行)。

3. 冷启动与请求超时

B1应用服务计划属于基础层,函数容易进入冷启动状态,而Shelly设备的请求超时时间可能较短:

  • 设备日志显示请求快速完成,可能是设备在Azure函数冷启动完成前就断开了连接,导致函数未实际处理请求;
  • 可尝试升级到B2或更高计划减少冷启动概率,或在Function App的配置 -> 常规设置中开启始终开启功能,避免冷启动。

4. HTTP协议版本兼容问题

Shelly设备可能使用较旧的HTTP协议版本(如HTTP/1.0),Azure网关对这类协议的支持有限:

  • 确认设备使用的HTTP版本,尝试强制设备使用HTTP/1.1;
  • 若无法修改设备配置,同样可通过API Management做协议转换。

5. 补充排查方向

除Application Insights外,还可查看:

  • Function App的日志流,实时确认是否有请求到达记录;
  • Azure门户中的资源日志,查看网关层的请求处理日志,定位请求是否被网关拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:55:15