1

現在、 Gsoapツールキットに基づいてWeb サービスに接続する iPhone アプリを構築しています。デバイスで 3g を切断して再接続した後にサービスに接続しようとした場合を除いて、すべて正常に動作します。

SOAP 1.1 fault: SOAP-ENV:Client [no subcode]
"Connection refused"
Detail: connect failed in tcp_connect()

デバッガーを使用すると、エラーが のconnect()メソッドに起因することがわかりますsocket.h。よくわかりませんが、Safari などの別のアプリを起動すると、デバイスがインターネットに接続されます。Web ページを読み込んだ後、アプリの接続は正常に機能します。

ここに私が使用しているコードがあります:

//GSoap initialization
    struct soap soap; 
    soap_init(&soap);
    soap.connect_timeout = 0;  
    soap.send_timeout = 0; 
    soap.recv_timeout = 0;


// objects request & response
// struct types can be foundin soapStub.h
struct _ns1__GetAuthentification requete;
struct _ns1__GetAuthentificationResponse reponse;

// init request
requete.ConnectPass = (char *) [connectPass UTF8String];
requete.Login = (char *) [login UTF8String];
requete.Password = (char *) [password UTF8String];
requete.soap = &soap;

// request callback. returns SOAP_OK if something has been returned
if(soap_call___ns1__GetAuthentification(&soap,NULL,NULL, &requete,&reponse) == SOAP_OK){

    //then we build the result
    NSLog(@"Yay!");

    soap_end(&soap); // remove deserialized data and clean up
    soap_done(&soap); // detach the gSOAP environment

    return authResult;

}
else {

    //NSLog(@"Soap Error : GetAuthentification");
    // We try to see if there's any problem. @catch statements are here just to keep note of the concerned
    // exceptions for each request. No utility for the code.
    @try {
        [self processFault:&soap];
    }
    @catch (MMWrongId * e) {
        @throw e;
    }
    @catch (MMConnectionFailed * e) {
        @throw e;
    }
    @catch (MMGetAuthentificationFault * e) {
        @throw e;
    }


    return nil;
}

特定のフラグ/オプションがありませんか?

4

1 に答える 1

1

同じ問題に遭遇した人のために、私は解決策を得ました。Michael Lasmanisは、これに大きな助けになりました。彼の答えは次のとおりです。

これが、iPhone の新しい iPhone 開発者に gsoap をお勧めしなくなった理由の 1 つです。gsoap は下位の bsd ソケットを使用し、上位レベルの iphone API をバイパスします。インターネット接続の状態を管理するのは高レベルの API であるため、最初にサファリを開始するとすべてが機能します。最も簡単な回避策は、nsurlconnection を使用して、よく知られたサイトへの http 接続を開き、gsoap を呼び出すことです。

于 2010-08-11T18:20:00.697 に答える