在nsmutablerequest ios中设置请求超时

时间:2013-11-16 22:22:33

标签: ios nsurlconnection settimeout nsurlrequest

当我尝试连接Web服务时,我需要在应用程序中设置30秒的时间。我尝试过cachePolicy:timeoutInterval,但这没有任何效果。我的代码如下:

NSURL *url = [NSURL URLWithString:@"http://myservice.asmx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];

[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"http://tempuri.org/GetVehiclesByPhone_ServiceCall_Proc" forHTTPHeaderField:@"SOAPAction"];
[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]];

NSError *error;
NSURLResponse *response;

webData =[[NSMutableData alloc] init];
webData = (NSMutableData *) [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

1 个答案:

答案 0 :(得分:0)

使用+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]

基本上,+[NSURLConnection sendSynchronousRequest:returningResponse:error:]不遵守小间隔传入的timeoutInterval,而异步请求则不符合。{/ p>

如果你考虑事情是如何工作的,那就显而易见了:同步请求是阻塞的,并且监视器没有简单的方法来检查超时 - 线程被阻止了!异步请求不会阻塞线程,因此,它可以检查每个runloop运行的超时时间。