2017-05-16 3 views
0

J'essaie d'écrire des données sur un controller en utilisant rest api.Windows Ce Compact Framework HttpWebRequest

Mais quelque chose d'étrange se produit. Les premières 1, 2, 3 écritures sont bien, mais que l'application se fige et obtient des exceptions de délai d'attente suis-je ne ferme pas quelque chose?

Ceci est le code ci-dessous:

 WebRequest client = (read) ? HttpWebRequest.Create(ReadUri) : HttpWebRequest.Create(WriteUri); 
     client.Method = "POST"; 
     client.ContentType = "application/json"; 
     CredentialCache creds = new CredentialCache(); 
     creds.Add(new Uri(WriteUri), "Basic", new NetworkCredential(*******)); 
     client.Credentials = creds; 
     client.PreAuthenticate = true; 
     ((HttpWebRequest)client).AllowWriteStreamBuffering = true; 
     client.Timeout = 10000; 
     //Skipped all data formatting 
     byte[] data = Encoding.UTF8.GetBytes(req); 
     client.ContentLength = data.Length; 
     Stream dataStream = null; 
     try 
     { 
      //HttpWebResponse response = (HttpWebResponse)client.GetResponse(); 
      dataStream = client.GetRequestStream(); 

      dataStream.Write(data, 0, data.Length); 
      dataStream.Flush(); 
      dataStream.Close(); 
      dataStream.Dispose(); 
      dataStream = null; 

     } 
     catch (WebException we) 
     { 
      string message = we.Message; 
     } 
     finally 
     { 
      client = null; 
     } 
+0

Vous devriez probablement obtenir la réponse (après avoir écrit dans le flux de demandes) et la disposer pour libérer la demande de la connexion. Sinon, il conserve les données de réponse jusqu'à ce que vous décidiez de les lire. Définir 'client' à' null' ne libère rien (pas immédiatement, de toute façon). –

+0

J'ai essayé d'écouter la réponse et a travaillé :) merci pour cela! Si vous faites une réponse, je voterai pour vous sinon je le ferai. – Combinu

Répondre

2

Une fois que vous avez envoyé la demande, vous devez traiter la réponse et l'éliminer. Si vous ne le faites pas, sous la hotte la demande et sa réponse resteront associées à la connexion, et .NET par défaut a seulement quelques connexions disponibles pour WebRequest s.

... 
dataStream.Close(); 
dataStream.Dispose(); 
dataStream = null; 
using (HttpWebResponse response = (HttpWebResponse)client.GetResponse()) 
{ 
}