2017-05-16 3 views
0

Ich versuche, einige Daten auf einem controller mit rest api schreiben.Windows CE Compact Framework HttpWebRequest

Aber etwas Seltsames passiert. Die ersten 1, 2, 3 Schreibvorgänge sind in Ordnung, aber als die Anwendung einfriert und Timeout-Ausnahmen bekommt, schließe ich etwas nicht?

Dies ist code unter:

 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

Sie sollten wahrscheinlich die Antwort erhalten (nach dem Schreiben in den Anfrage-Stream) und entsorgen Sie es, um die Anfrage von der Verbindung freizugeben. Andernfalls behält es die Antwortdaten bei, bis Sie sich entscheiden, daraus zu lesen. Wird 'client' auf 'null' gesetzt, wird nichts (nicht sofort) freigegeben. –

+0

Ich habe versucht, die Antwort zu hören und arbeitete :) Danke dafür! Wenn Sie eine Antwort geben, werde ich für Sie stimmen, sonst werde ich ich tun. – Combinu

Antwort

2

Nachdem Sie die Anfrage geschickt haben, sollten Sie die Antwort verarbeiten und entsorgen. Wenn Sie dies nicht tun, bleiben die Anfrage und ihre Antwort unter der Haube mit der Verbindung verbunden, und .NET hat standardmäßig nur einige wenige Verbindungen für WebRequest s.

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