2010-11-24 31 views
4

J'utilise le framework ASIHTTPRequest dans mon application iPhone pour gérer la communication HTTP. J'ai suivi leurs exemples donnés dans la page d'accueil du projet pour envoyer des requêtes asynchrones. Là, nous devons implémenter deux callbacks, un pour requestFinish et un autre pour requestFailed.ASIHttpRequest envoie un code d'état weired de zéro. Ne pas atteindre le serveur

Cependant, 60% des demandes de temps envoyées par l'iPhone se retrouvent dans la méthode de rappel "requestFinish" et donnent un code d'état HTTP valide. Mais parfois, il va à callback "requestFailed" et le code d'état devient "0" ce qui est confus. Mes enquêtes ont révélé que la connexion Internet est correcte, et j'envoie la demande à l'URL correcte, mais aucun message de journal trouvé dans le journal du serveur. Alors, pourquoi la requête est-elle abandonnée au milieu de manière si aléatoire? Est-ce que quelqu'un est tombé sur ce type de problème? Sera très utile.

Merci

Répondre

0

En plus de ce que Phooze a suggéré, il existe une connexion à ASIHTTPRequestConfig.h que vous pouvez activer, qui peut fournir un indice quant à ce qui se passe.

+0

Merci pour toutes les réponses. Oui j'ai connecté les appels ASIHTTPRequest en utilisant NSError venant de cela, et aussi j'ai surveillé les appels atteignant la fin du serveur du niveau de paquet de TCP. Donc le problème le plus étrange que je peux voir est que les paquets de demande atteignent le serveur Avec le corps du message, la requête échouée est invoquée depuis l'iPhone et le code d'état est zéro. D'ailleurs, nous voyons clairement que le serveur envoie 200 mais comment il devient 0 à la fin de l'iPhone – chathuram

+0

En passant, j'ai enregistré le message d'erreur de ASIHTTPRequest, donc il se plaint d'un timeout, mais le temps d'attente est très court et la vitesse du réseau est élevée . Donc c'est plutôt bizarre. – chathuram

+1

Eh bien, vous pouvez essayer d'augmenter le délai ([request setTimeout: 200] si je me souviens bien) et voir si cela aide. Les informations de débogage que j'ai mentionnées peuvent montrer quelque chose de plus, vous pouvez éditer la sortie de débogage dans votre question une fois que vous l'avez collecté. – JosephH

5

Vous cherchez le code d'état de l'objet ASIHTTPRequest? Ce code est simplement un code de réponse HTTP - si vous n'avez pas reçu de réponse, cela devrait être zéro. Au lieu de cela, vous voulez regarder l'objet NSError que le rappel d'échec de délégué vous donne.

J'utiliser quelque chose comme:

NSLog(@"%@",[error localizedErrorDescription]); 

Pour imprimer le journal que l'erreur est. Bien sûr, "error" est le nom de la variable dans la signature de la méthode - vous devriez vérifier cela, je pense que c'est ce que la valeur par défaut est.

1

En [ASHTTPRequest initialize], j'ai changé

[sharedQueue setMaxConcurrentOperationCount:4] 

à

[sharedQueue setMaxConcurrentOperationCount:10] 

Ce travail pour moi, mais je ne sais pas pourquoi.

PLUS:

Je trouve this.