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

Xamarin开发iOS调用本地Azure HTTP触发器出现请求超时错误求助

解决方案
  • 修正服务访问地址
    你本地运行的Azure HTTP触发器部署在Windows 10主机上,调试的iOS应用运行在Mac端的模拟器/真机上,无法通过环回地址(127.0.0.1/localhost)访问Windows主机资源,需要将Constants.RegisterDeviceLoginUrl中的地址替换为Windows主机在当前局域网的真实IP,同时启动Azure Function时添加启动参数--cors "*" --urls "http://0.0.0.0:7071",确保服务绑定所有网卡接口并放行跨域请求。
  • 优化异步调用逻辑
    当前代码使用.Result同步阻塞异步方法,在iOS的NSUrlSession底层实现中极易触发死锁导致请求超时,需要修改为异步await写法:
var _httpClient = DependencyService.Get<ICustomHttpClient>().HttpClient;
public async Task<bool> RegisterDeviceLogin()
{
    var deviceData = new Dictionary<string, string>
    {
        { "platformDeviceId", Constants.DeviceId }
    };
    var requestData = JsonConvert.SerializeObject(deviceData);
    var content = new StringContent(requestData, Encoding.UTF8, "application/json");
    var responseMessage = await _httpClient.PostAsync(Constants.RegisterDeviceLoginUrl, content);
    return responseMessage.IsSuccessStatusCode;
}
  • 确认iOS ATS配置生效
    你当前使用HTTP协议请求服务,除已配置的NSUrl相关设置外,需要确认Info.plist中已添加ATS例外规则,要么将NSAppTransportSecurity下的NSAllowsArbitraryLoads设为true,要么将Windows主机的局域网IP单独添加到ATS域名例外列表中,避免iOS系统拦截非加密HTTP请求。
  • 验证基础网络连通性
    先在Mac端打开Safari浏览器,直接输入你要请求的Azure Function完整地址,确认可以正常拿到响应,如果Safari也无法访问,优先排查Windows入站防火墙规则是否放行Azure Function使用的端口,以及Windows和Mac是否在同一局域网段。
  • 检查HttpClient超时配置
    确认你注入的ICustomHttpClient实例中,HttpClient.Timeout属性设置不小于30秒,避免局域网延迟导致的主动超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:00:04