访问Web服务的HTTP错误408

时间:2011-03-14 10:06:13

标签: iphone web-services http http-status-code-408

我正在从iPhone发送POST请求到webservice,这是一个基于SOAP的REST层。我收到错误408请求超时,在iPhone设备和模拟器上进行测试。在使用模拟器进行测试时,我注意到如果我首先从浏览器访问Web服务器,然后运行模拟器,问题就会消失并且通信正常。行为与此问题非常相似HTTP, 408 Request timeout 这是我用来创建POST请求的代码。有没有人遇到过这种行为,并找到了解决方案?

NSString * urlString = [NSString stringWithFormat:@"%@%@", kBaseURL,method];
NSURL * myURL = [NSURL URLWithString:urlString];
NSLog(@"URL %@", myURL);

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:myURL];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[theRequest setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
[theRequest setTimeoutInterval:60]; // leave at default 60 secs 
NSLog(@"Post Body: %@",body);   
NSURLConnection *theConnection = [[NSURLConnection alloc] 
                                  initWithRequest:theRequest 
                                  delegate:self];
if( theConnection ) {
    if (webData){
        [webData release];
    }
    webData = [[NSMutableData data] retain];
    NSLog(@"connection set up");
}
else {
    NSLog(@"theConnection is NULL");
}
self.mainConnection=theConnection;
[theConnection release];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

2 个答案:

答案 0 :(得分:2)

对不起我的英文,

我也面对这个问题。我的应用程序是一个调用Web服务的exe。 web服务使用apache cxf编码。然后,我收到一个错误“远程服务器在客户端返回了意外响应(408)请求超时”。但如果我首先从浏览器访问wsdl,我的exe成功运行。我还没有找到任何解决方案。我在调用webservice之前添加了代码。

WebClient x = new WebClient();

string source = x.DownloadString("http://......../InfoOperations?wsdl");

  if (source != "")
  {
      // Call your web method here...
  }

它与浏览器做同样的事情。这解决了这个问题。但通常情况下,我们不需要添加此代码。

然后,我改变了webservise编码。我用过Axis2。但我的问题没有解决。 我认为这个问题与防火墙有关。

Connection to webservice times out first time

http://www.mustafakurkcu.com/java/230-cxfclientreturn408.html

答案 1 :(得分:1)

我最终找到了造成这种情况的原因。我尝试更改URL,发现我可以访问任何其他网站,但不能访问托管我需要与之通信的Web服务的网络服务器。我在3个不同的网络上测试了3G上的iPhone,所以这在我的本地网络上不是问题。我也尝试使用ASIHTTPRequest而不是NSURLConnection,这没有效果。如果我在同一设备上打开一个webbrowser并在尝试访问Web服务之前将其指向远程服务器,则该连接有效。
原来远程服务器没有正确处理POST请求,但它处理GET OK。浏览器使用GET,这就是为什么浏览器能够在我的Web服务(使用POST)时无法建立连接的原因。一个快速而讨厌的解决方法是发送GET请求并等到它完成后再尝试POST请求。