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
相关产品推荐
相关产品推荐

