没有使用ASIHTTPRequest发送请求信息

时间:2012-05-29 18:32:52

标签: iphone ios networking timeout asihttprequest

我在使用ASIHTTPRequest的iOS 4.3+上遇到问题,其中一个请求被触发但没有数据(请求methed,url,header等)到达服务器。连接超时,因为它永远不会回来。

服务器听到空请求(在一段延迟之后),然后听到一个有效的请求,当然从未向更高级别的代码报告,因为连接已经超时。这有点奇怪,因为请求未配置为重新发送数据。

这种情况经常发生在应用程序被推到后台一段时间(15分钟或更长时间)并且手机已被允许睡眠之后。

我的请求配置如下:

NSMutableData *postData = nil;

NSString *urlString = [NSString stringWithFormat:@"%@%@",[self baseURL],requestPath];

OTSHTTPRequest *request = [OTSHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setCachePolicy:ASIFallbackToCacheIfLoadFailsCachePolicy];
[request setTimeOutSeconds:45];
//Set up body
NSString *queryString = [self _RPcreateQueryString:query];
if ([queryString length]>0) {
    if(method == RPAsyncServerMethodPost || method == RPAsyncServerMethodPut){
        postData = [[[queryString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] mutableCopy] autorelease];
    }else{
        NSURL *url = [NSURL URLWithString:[urlString stringByAppendingFormat:@"?%@",queryString]];
        [request setURL:url];
        if (!url) return nil; //url String malformed.
    }
}

// ... ///
// method setting stripped for brevity

[request addRequestHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"];

if(headers){
    for (NSString* head in headers) {
        if ([[headers valueForKey:head] isKindOfClass:[NSString class]]) 
            [request addRequestHeader:head value:[headers valueForKey:head]];
    }
}
[request addRequestHeader:@"Content-Length" value:postLength];
[request setPostBody:postData];

OTSHTTPRequest只是ASIHTTPRequest的子类,它包含字符串标记的属性,漂亮的描述以及消费对象使用的其他bling,并且不会覆盖任何ASI内容。

任何人都可以了解ASI为什么/如何打开连接,然后一次几分钟内什么都不发送?

编辑:只是为了澄清。连接DO与服务器联系,它永远不会通过我的服务器日志可以告诉的连接发送任何数据。这似乎总是发生在应用程序唤醒上并影响所有连接,包括由MapKit生成的NSURLConnections。整个应用程序似乎松动了它的弹珠。 我还看到一堆后台任务在此之前严重结束,但在调试器中我永远无法捕获它们。

3 个答案:

答案 0 :(得分:0)

根据您提供的代码,您似乎没有开始请求。完成各种属性的设置后,尝试调用OTSHTTPRequest对象的 - [startSynchronous]或 - [startAsynchronous]方法。

答案 1 :(得分:0)

你是在设置代表,要么我忽略了它,要么你把它剥离了。

答案 2 :(得分:0)

直到几天过去我才想说什么。这种情况下的解决方案非常模糊。

我正在使用的TestFlight版本中有一个可能导致此问题的错误。自从它被删除后我没有遇到过这个问题。