0

ここで私の問題は何ですか? ストリームを Web に書き戻すときに、コンテンツの一部が含まれているファイルを開きますが、すべての形式が正しくなく、一部が欠落しています。

論理エラーが原因でデータが失われていますか?

注:以下の 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();
4

1 に答える 1

1

論理エラーが原因でデータが失われていますか?

はい、おそらく、コードを少し単純化してみてください。ここでは、複数のメモリ ストリームが必要だとは思いません。

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);
于 2012-06-26T11:58:54.767 に答える