Stream kann nicht geschlossen werden

30/10/2008 - 12:17 von Frederic Luchting | Report spam
Hallo ihr,

ich hoffe, dass mir jemand weiterhelfen kann.
In meiner Webanwendung habe ich als Bezahlverfahren
einen Kreditkartendatenaustausch mit Wirecard
implementiert. Der Beispielcode war in Java und
ich habe ihn in C# umgeschrieben.

Das klappte auch paar hundert Mal, bis es bei
einem Kunden reproduzierbar zu einem Fehler kommt:

"Stream kann nicht geschlossen werden, bevor alle
Bytes geschrieben wurden."

Das klingt ja ziemlich selbsterklàrend aber
was kann ich dagegen tun? Was ist an dem
Code falsch? Wie schreibt man das besser?

string reqString = "<xml . irgendetwas... >";
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.ContentType = "text/xml";
req.ContentLength = reqString.Length;
req.Credentials = new NetworkCredential(user, passwd);
req.PreAuthenticate = true;
req.Method = "POST";

StreamWriter myWriter = new StreamWriter(req.GetRequestStream());
myWriter.Write(reqString);
myWriter.Flush();
myWriter.Close(); // * Fehler !

HttpWebResponse res = (HttpWebResponse)req.GetResponse();
Stream resStream = res.GetResponseStream();
StreamReader sr1 = new StreamReader(resStream);

return sr1.ReadToEnd();

Vielen Dank und Gruß

Frederic
.
 

Lesen sie die antworten

#1 Christoph Schneegans
30/10/2008 - 13:06 | Warnen spam
Frederic Luchting schrieb:

string reqString = "<xml . irgendetwas... >";
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.ContentType = "text/xml";
req.ContentLength = reqString.Length;



Die Lànge des Streams entspricht nicht notwendigerweise der Lànge des
Strings. Ein StreamWriter codiert standardmàßig in UTF-8, und da
können aus einem Zeichen auch zwei, drei oder vier Bytes werden. Du
kannst den String vorher mit Encoding.GetBytes codieren und die
Lànge des Byte-Arrays angeben. Andererseits setze ich .ContentLength
überhaupt selten explizit.

<http://schneegans.de/expression-web...erung/> · Unicode in xWeb

Ähnliche fragen