2

我正在从 iPhone 向 web 服务发送一个 POST 请求,这是一个基于 SOAP 的 REST 层。我收到错误 408 请求超时,在 iPhone 设备和模拟器上进行测试。在使用模拟器进行测试时,我注意到如果我先从浏览器访问网络服务器,然后运行模拟器,问题就会消失并且通信正常。行为与这个问题非常相似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; 
4

2 回答 2

2

对不起我的英语不好,

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

WebClient x = new WebClient();

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

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

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

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

第一次连接到 Web 服务超时

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

于 2011-10-01T14:11:09.370 回答
1

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

于 2011-04-05T11:09:15.553 回答