2010-11-02 29 views
0

J'utilise httpwebrequest et httpwebresponse pour envoyer une requête et obtenir une réponse respectivement. Pour une raison quelconque, ma connexion est fermée avant que la réponse ne soit reçue.comment maintenir la connexion en direct lors de l'utilisation de httpwebrequest?

Voici mon code:

  WebRequest webRequest = WebRequest.Create (uri); 
      webRequest.ContentType = "application/x-www-form-urlencoded"; 
      webRequest.Method = "POST"; 
      byte[] bytes = Encoding.ASCII.GetBytes (parameters); 
      Stream os = null; 
      try 
      { // send the Post 
       webRequest.ContentLength = bytes.Length; //Count bytes to send 
       os = webRequest.GetRequestStream(); 
       os.Write (bytes, 0, bytes.Length);   //Send it 
      } 
      catch (WebException ex) 
      { 
       MessageBox.Show (ex.Message, "HttpPost: Request error", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 

      try 
      { // get the response 
       WebResponse webResponse = webRequest.GetResponse(); 
       if (webResponse == null) 
       { return null; } 
       StreamReader sr = new StreamReader (webResponse.GetResponseStream()); 
       return sr.ReadToEnd().Trim(); 
      } 
      catch (WebException ex) 
      { 
       MessageBox.Show (ex.Message, "HttpPost: Response error", 
       MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      return null; 
     } 

Erreur:

alt text

+0

A peine voir le message d'erreur. S'il s'agit d'un délai de connexion, vérifiez auprès du fichier de configuration de votre serveur Web (ou J2EE Server). – exiter2000

+0

Erreur: Le serveur distant a renvoyé une erreur. (500) Erreur interne du serveur. – BumbleBee

+0

Lorsque j'ai regardé dans la pile, je vois la connexion: fermer – BumbleBee

Répondre

1

Par défaut, si vous utilisez le protocole HTTP/1.1, la connexion est supposée être maintenue en vie, à moins que le serveur décide d'indiquer autrement (avec un en-tête Connection: close).

Dans votre cas, vous avez un serveur refusant la requête avec une erreur 500. Vous devriez étudier pourquoi cela se produit. Vous ne devriez pas vous inquiéter de la connexion: fermez l'en-tête à ce stade. Même si le serveur ferme la connexion, le client gérera cela avec élégance en ouvrant une nouvelle connexion la prochaine fois.

En résumé, la réponse 500 du serveur n'est pas due à la fermeture de la connexion. C'est parce que le serveur n'aime pas la requête que vous avez envoyée.

+0

Merci Feroze. – BumbleBee

0

S'il est une erreur de délai d'attente de session (je ne vois pas le message d'erreur), vous devez avoir le paramètre de configuration comme ci-dessous votre serveur Web ou votre serveur J2EE.

Ci-dessous est de web.xml tomcat

<session-config> 
    <session-timeout>30</session-timeout> 
</session-config> 
+0

J'essaie de consommer un service web de mon application Windows. – BumbleBee

+0

Je ne sais pas comment je peux être en mesure de définir le délai d'attente de session sur le serveur Web – BumbleBee