2012-06-26 1 views
0

Что мне делать? Когда я пишу поток обратно в Интернет, откройте файл, в котором содержится часть контента, но все искажено, а некоторые отсутствуют.memystream содержит плохую разметку xml при чтении

Я испытываю потерю данных из-за логической ошибки?

Примечание: поток readstream и writestream подмахивает тем, что будет заполняться службой. Я получаю поток для чтения из службы. Мне нужно будет написать этот поток.

 MemoryStream writeStream = new MemoryStream(); 
     byte[] buffer = new byte[256]; 
     OrderDocument doc = new OrderDocument(); 
     doc.Format = "xml"; 
     doc.DocumentId = "5555555"; 
     doc.Aid = "ZZ"; 
     doc.PrimaryServerPort = "PORT"; 
     MemoryStream readStream = new MemoryStream(doc.GetDocument()); 
     while (readStream != null && readStream.Read(buffer, 0, buffer.Length) > 0) 
     { 
      writeStream.Write(buffer, 0, buffer.Length); 
     } 
     writeStream.Flush(); 
     writeStream.Position = 0; 
     Response.Buffer = true; 
     Response.Clear(); 
     Response.ClearContent(); 
     Response.ClearHeaders(); 

     Response.ContentType = "text/xml"; 
     Response.ClearHeaders(); 
     Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xml", doc.DocumentId)); 
     Response.AddHeader("Content-Length", writeStream.Length.ToString()); 
     Response.BinaryWrite(writeStream.ToArray()); 
     Response.End(); 
+0

Что такое 'OrderDocument'? Что делает 'doc.GetDocument()' do? Какие данные они содержат? Кроме того, это может быть проблемой кодирования. То, что вы описываете, похоже на то, что происходит, когда текстовый ридер смешивает UTF-8 и ASCII. Играйте с кодировкой вывода. – GregRos

ответ

1

Am I испытывают потерю данных из-за логической ошибки?

Возможно, вы можете немного упростить код. Я действительно не вижу необходимости в нескольких потоках памяти здесь:

OrderDocument doc = new OrderDocument(); 
doc.Format = "xml"; 
doc.DocumentId = "5555555"; 
doc.Aid = "ZZ"; 
doc.PrimaryServerPort = "PORT"; 
byte[] buffer = doc.GetDocument(); 

Response.Buffer = true; 
Response.Clear(); 
Response.ClearHeaders(); 
Response.ContentType = "text/xml"; 
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xml", doc.DocumentId)); 
Response.OutputStream.Write(buffer, 0, buffer.Length); 
+0

Это тестовая страница, которую я создал, которая издевается над тем, что мне позвонит сервисный вызов. Я получаю ответ потока от службы и вам нужно будет написать это обратно. – dbobrowski