所以,这个问题很难简单描述,我觉得在AFNetworking github中提出问题之前,我应该先问这里。故事是这样的:
// Definition for words in the story.
Characters:
- APP: Our iOS app, which POST requests to a URL's API (has user input from a UITextField)
APP's networking connection using framework AFNetworking 3.0
- DEV: Us developers, who created the iOS app.
- CUST: The troublesome customer, who live far from DEV.
CUST used app before, then one day it doesn't work anymore (S1 has died).
Server:
- S1: The CUST's primary server (died for some reasons). This has the IP address = ip1
- S2: The CUST's secondary server (works fine). This has the IP address = ip2
- URL: The domain URL point to both server (using load balancing or something like that, I dunno).
// End-of-definition
故事开始:
CUST
使用应用程序,输入URL
,连接失败。CUST
在iPad浏览器中输入URL
,正常访问。CUST
要求DEV
检查发生了什么。DEV
在应用程序中输入URL
,正常连接。当时,DEV
不知道CUST
有2个服务器。
CCD_ 11&DEV
感到绝望,挣扎了好几次。CUST
尝试了他能尝试的一切(使用https
/http
,添加/删除www
,删除应用程序并重新安装)。DEV
由于不合理的原因(连接器错误、api错误…)而分心。然后CUST
记住他有两个服务器。CCD_ 19共享CCD_ 20以供CCD_ 21检查。这时DEV
发现S1
已经死亡,但S2
还没有。
因此,DEV
得到了CUST
不能使用APP
访问URL
的原因:S1
已经死亡然而,这是SO的真正问题:
为什么它对我们有效,但对CUST
无效?为什么APP
(在DEV
的手中)去了S2
,而在CUST
的手中,它去了S1
(并死亡)?但为什么CUST
可以正常使用iPad浏览器访问URL
?
它和DNS有关系吗?VPN?负载平衡?我很想知道这个问题的原因。
感谢阅读。请随意编辑这个问题,因为我也很难尽可能简单地描述这个问题。
更新1:
当James Jayson
询问APP
如何连接到URL
时,它使用AFNetworking 3.0
和AFHTTPSessionManager
,并进行一些设置:
self.sessionManager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseUrl sessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
self.sessionManager.securityPolicy.allowInvalidCertificates = YES;
self.sessionManager.securityPolicy.validatesDomainName = NO;
self.sessionManager.requestSerializer.timeoutInterval = timeout;
self.sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
// Call API:
[self.sessionManager POST:path parameters:dictParams progress:nil success:^(NSURLSessionTask *task, id responseObject) {
// success block
} failure:^(NSURLSessionTask *task, NSError *error) {
// failure block
}
更新2:
所以,现在我有了新的东西:CUST
使用iOS 9.3.5,DEV
使用iOS 10.x。DEV
尝试在iOS 9.3.5设备上调试,CUST
的错误出现,错误消息是这样的(几乎相同,只是URL不同)。
日志:错误域=NSURLErrorDomain Code=-1004"无法连接到服务器。"UserInfo={NSErrorFailingURLStringKey=APIURL,_kCFStreamErrorCodeKey=-2200,NSErrorFailingURLKey=APIURL,NSLocalizedDescription=无法连接到服务器。,_kCFStreamErrorDomainKey=4,NSUnderlyingError=0x16146990{错误域=kCFErrorDomainCFNetwork代码=-1004"(null)"UserInfo={_kCFStreamErrorDomainKey=4,NSErrorPerAddressKey={length=16,capacity=16,bytes=0x100201bb253ce716000000000000000000000000},_kCFStreamErrorCodeKey=-2200}}
现在DEV
正在努力解决如何处理此错误。请帮忙。
在不知道应用程序是什么以及它是如何工作的情况下,我猜它的状态已满,可能是由于当前死服务器上的会话处于活动状态,启动会话的开发人员会通过负载均衡器定向到服务器2。