2010-08-11 1 views
1

Je suis en train de créer une application iPhone basée sur la boîte à outils Gsoap pour me connecter à un service Web. Tout fonctionne bien sauf quand je tente de me connecter à mon service après déconnexion et reconnexion 3g sur l'appareil, je reçois:L'utilisation de GSoap renvoie EHOSTUNREACH lors de l'appel de connect() via socket.h

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

de travail à travers le débogueur montre que l'erreur vient de connect() méthode de socket.h. Je ne comprends pas vraiment, quand je lance une autre application comme Safari, l'appareil est connecté à Internet. Et après le chargement d'une page Web, la connexion de mon application fonctionne bien.

Voici le code que je utilise:

//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; 
} 

Suis-je manque tout particulier drapeau/option?

Répondre

1

Pour ceux qui rencontrent le même problème, j'ai eu une solution. Michael Lasmanis a été d'une aide énorme pour celui-ci. Voici sa réponse:

c'est l'une des raisons pour lesquelles je ne recommande plus gsoap pour les développeurs iphone new iphone. gsoap utilise les sockets bsd inférieures et contourne les apis iphone de niveau supérieur. C'est l'api de niveau supérieur qui gère l'état de la connectivité Internet, c'est pourquoi si vous démarrez Safari en premier, alors tout fonctionne. La solution la plus simple consiste à utiliser nsurlconnection pour ouvrir une connexion http à un site connu avant d'appeler gsoap.

Questions connexes