2

iPhoneからWebサービス(SOAP上のRESTレイヤー)にPOSTリクエストを送信しています。iPhoneデバイスとシミュレータの両方でテストしているエラー408リクエストタイムアウトが発生します。シミュレーターでテストしたところ、最初にブラウザーからWebサーバーにアクセスし、次にシミュレーターを実行すると、問題が解決し、通信が機能することに気付きました。動作はこの質問に非常に似ています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; 
4

2 に答える 2

2

私の英語でごめんなさい、

私もこの問題に直面しました。私のアプリケーションは、Webサービスを呼び出すexeです。Webサービスはapachecxfでコーディングされています。次に、クライアント側で「リモートサーバーが予期しない応答(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を変更してみましたが、他のWebサイトにはアクセスできましたが、通信する必要のあるWebサービスをホストしているWebサーバーにはアクセスできませんでした。3つの異なるネットワークと3GのiPhoneでテストしたので、ローカルネットワークでは問題ありませんでした。NSURLConnectionの代わりにASIHTTPRequestを使用してみましたが、効果はありませんでした。同じデバイスでWebブラウザーを開き、Webサービスにアクセスする前にリモートサーバーをポイントした場合、接続は機能しました。
リモートサーバーはPOSTリクエストを正しく処理していませんでしたが、GETOKを処理していました。ブラウザはGETを使用するため、Webサービス(POSTを使用)が接続できなかったときにブラウザが接続を設定できたのはこのためです。迅速で厄介な回避策は、GETリクエストを送信し、それが完了するまで待ってからPOSTリクエストを試行することです。

于 2011-04-05T11:09:15.553 に答える