Ошибка HTTP 408 при доступе к веб-сервису - PullRequest
2 голосов
/ 14 марта 2011

Я отправляю запрос POST с iPhone на веб-сервис, который представляет собой слой REST поверх SOAP. Я получаю сообщение об ошибке 408 Request Timeout, тестирование как на устройстве iPhone, так и на симуляторе. При тестировании с помощью симулятора я заметил, что если я сначала получаю доступ к веб-серверу из браузера, а затем запускаю симулятор, проблема исчезает, и связь работает. Поведение очень похоже на этот вопрос HTTP, 408 Время ожидания запроса Вот код, который я использую для создания запроса 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 ]

2 голосов
/ 01 октября 2011

извините за мой английский,

я тоже столкнулся с этой штукой.Мое приложение exe, который вызывает веб-сервис.веб-сервис кодируется с Apache CXF.Затем я получил сообщение об ошибке «Удаленный сервер возвратил неожиданный ответ (408) Время ожидания запроса» на стороне клиента.но если я сначала получаю доступ к wsdl из браузера, мой exe успешно запускается.Я не нашел никакого решения.Я добавляю следующие коды перед вызовами веб-службы.

WebClient x = new WebClient();

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

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

То же самое происходит с браузером.это решило проблему.но обычно нам не нужно добавлять этот код.

Затем я изменил кодировку веб-службы.Я использовал Axis2.но моя проблема не решена.Я думал, что эта проблема связана с брандмауэром.

Время ожидания соединения с веб-сервисом в первый раз

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

1 голос
/ 05 апреля 2011

В конце концов я обнаружил, что вызвало это.Я попытался изменить URL-адрес и обнаружил, что могу получить доступ к любому другому веб-сайту, но не к веб-серверу, на котором размещен веб-сервис, с которым мне нужно было общаться.Я тестировал в 3 разных сетях плюс iPhone на 3G, поэтому в моей локальной сети проблем не было.Я также попытался использовать ASIHTTPRequest вместо NSURLConnection, это не имело никакого эффекта.Соединение сработало, если я открыл веб-браузер на том же устройстве и направил его на удаленный сервер, прежде чем пытался получить доступ к веб-службе.
Оказывается, удаленный сервер неправильно обрабатывал запросы POST, но он обрабатывал GET OK.Браузер использует GET, поэтому браузер смог установить соединение, когда мой веб-сервис (использующий POST) не смог.Быстрый и неприятный обходной путь - отправить запрос GET и дождаться его завершения, прежде чем пытаться выполнить запрос POST.

...