在我的服务上,我正在尝试创建并返回MemoryStream
,如下所示:
// Write data.
MemoryStream memoryStream = new MemoryStream();
using (StreamWriter txtwriter = new StreamWriter(memoryStream, System.Text.Encoding.UTF8))
{
string tempString = "Test";
txtwriter.Write(tempString);
txtwriter.WriteLine();
// End response.
memoryStream.Position = 0L;
response.ReportMemoryStream = memoryStream;
response.Length = memoryStream.Length;
return response;
}
注意:在End response
语句之外加using
部分会导致Cannot access a closed stream error
。
我的response
是一个简单的DataContract
。当我尝试在我的客户端中读取此数据时,执行以下操作:
// Write stream.
if (remoteReport.ReportMemoryStream != null)
{
remoteReport.ReportMemoryStream.WriteTo(Response.OutputStream);
}
我再次收到有关正在关闭的流的错误。
我如何解决这个问题,为什么我的流关闭了,即使我没有明确这样做?
答案 0 :(得分:1)
替换:
response.ReportMemoryStream = memoryStream;
带
memoryStream.CopyTo(response.ReportMemoryStream);
现在您正在使用我认为的引用类型,而您的using
声明只是处理您正在使用的流。
答案 1 :(得分:1)
您需要刷新StreamWriter
实例,以便写入MemoryStream
实例 -
txtwriter.Flush();
然后您需要删除using
阻止,因此txtwriter
默认情况下不会销毁memoryStream
。