尝试从我的WCF服务发送数据时无法访问关闭流错误

时间:2016-03-07 08:57:25

标签: c# asp.net wcf

在我的服务上,我正在尝试创建并返回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);
}

我再次收到有关正在关闭的流的错误。

我如何解决这个问题,为什么我的流关闭了,即使我没有明确这样做?

2 个答案:

答案 0 :(得分:1)

替换:

response.ReportMemoryStream = memoryStream;

memoryStream.CopyTo(response.ReportMemoryStream);

现在您正在使用我认为的引用类型,而您的using声明只是处理您正在使用的流。

答案 1 :(得分:1)

您需要刷新StreamWriter实例,以便写入MemoryStream实例 -

 txtwriter.Flush();

然后您需要删除using阻止,因此txtwriter默认情况下不会销毁memoryStream