【问题标题】:Getting Error Domain=NSURLErrorDomain Code=-1005 on mobile network only仅在移动网络上获取错误域 = NSURLErrorDomain 代码 = -1005
【发布时间】:2017-11-19 16:42:30
【问题描述】:

我在 iOS 10.3.2 上使用 Xcode 8.3.2 构建了一个应用程序。我使用NSURLSession 来实现网络服务。我正在使用以下代码来执行此操作。

NSMutableURLRequest *request=[[NSMutableURLRequest alloc]initWithURL:Url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:180.0] ;

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
[dict setObject:lati forKey:@"latitude"];
[dict setObject:longi forKey:@"longitude"];

NSError *errJsonToData = nil;
NSData *requestPostData=[NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&errJsonToData] ; 

[request setHTTPMethod:@"POST"] ;
[request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[requestPostData length]] ;forHTTPHeaderField:@"Content-Length"] ;
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestPostData] ;


NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:[NSOperationQueue mainQueue]];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable connectionError) {
    if(connectionError)
    {
      NSLog(@"Error Description: %@",[connectionError localizedDescription]);
    } else { //do anything}
}];
[dataTask resume];

现在我的网络服务网址是 http 连接。为此,我还在 Info.plist 中添加了 App Transport Security。但问题是此代码在连接到 wifi 时工作正常,但在连接到 移动网络(即 3G、LTE)时会抛出错误有时。我收到错误“网络连接丢失。”错误如下:

错误:错误域=NSURLErrorDomain 代码=-1005 "网络 连接丢失。” UserInfo=0x7ba8e5b0 {NSErrorFailingURLStringKey=, _kCFStreamErrorCodeKey=57, NSErrorFailingURLKey=, NSLocalizedDescription=网络连接 丢失了。,_kCFStreamErrorDomainKey=1,NSUnderlyingError=0x7a6957e0 “网络连接丢失。”}

如果是典型的服务器错误,那么为什么它只发生在移动网络上?

【问题讨论】:

  • 您是否可以尝试使用其他运营商,或者至少在另一部手机上尝试?错误很可能是正确的,您只需要有适当的逻辑来处理它。在现实世界中,用户无论如何都会体验到这一点。
  • @CodeBender :我们尝试了 AT&T、Verizon 和 Sprint 运营商的不同手机。但结果相同。
  • 好吧,也有可能你的性能很差,但是看到所有的运营商很有趣,因为他们很少共享基础设施。您是否研究过诸如 Reachability 框架之类的东西来监控设备上的连接状态?
  • @CodeBender : 不...用户向我证实他们拥有强大的 LTE 连接。是的,我已经检查过了。问题是其他 API 工作正常,但是这个特殊的 API 在高峰时间(当所有用户访问同一个 API 时)从一个巨大的表中获取数据只在移动网络中给出错误。
  • 有趣的是,我在 >=iOS 10.0 上没有遇到这个问题。您认为它是 iOS 10.3.2 上 Xocde 8.3.2 的错误吗?

标签: ios nsurlsession nserror nsurlerrordomain xcode8


【解决方案1】:

根据您使用的服务器,问题可能出在服务器上的“KeepAlive”设置上(通常是由于服务器的流量高于预期)。尝试捕获该特定错误代码,然后重新尝试完全相同的 URL 请求。希望它能够正常工作,但如果它第二次出现同样的错误,那么还有一个更大的问题需要解决。

您也可以尝试查看服务器上的 KeepAlive 设置,然后禁用该功能或​​调整设置,但我建议先尝试其他选项以缩小一些可能的问题。

祝你好运!

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2017-05-07
    • 2014-12-11
    • 2015-03-18
    • 1970-01-01
    • 2016-05-14
    • 2015-12-06
    • 2016-02-22
    • 2015-07-27
    相关资源
    最近更新 更多