从Wcf流服务直接到磁盘

问题描述:

我有一个wcf服务,发送给我流(通常是大的)。作为客户端应用程序,我的角色是通过WCF获取流并将其保存到磁盘。我写了一些代码,但它似乎首先将流导入RAM,然后从RAM中写入磁盘。我想安全地获取流并将其直接写入磁盘,而不是用大文件填充内存。这样做的好方法是什么?这是我到现在为止所做的:从Wcf流服务直接到磁盘

Stream sourceStream = SsClient.GetFile(FolderId, Helper.GetISession()); 
using (var targetStream = new FileStream(thisComputerPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) 
{ 
    //read from the input stream in 65000 byte chunks 
    const int bufferLen = 65000; 
    var buffer = new byte[bufferLen]; 
    int count; 
    while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0) 
    { 
     // save to output stream 
     targetStream.Write(buffer, 0, count); 
    } 
    targetStream.Close(); 
    sourceStream.Close(); 
} 

我希望我能够清楚地解释我的问题。对不起,我的英语顺便说一下。

我不介意使用用于缓冲的目的或类似的东西公羊,我只是不希望它与每次1-2 GB流的填充,因为这将让客户计算机硬盘时候,如果它只是有2 g的ram。

你检查以下职位

How to Save a Stream

Writing large stream to a file

让我们知道柜面任何疑问对这些实现的。

+0

在这些实现中,它看起来像输入流已经存在。我的问题是收集来自web服务的流,我可以写入磁盘。例如,在第二种解决方案中,我可以使用它: 复制(SsClient.GetFile(FolderId,Helper.GetISession()),targetStream,progressCallback); ?我的GetFile函数的返回类型是流btw。 – 2013-05-05 12:48:20

+0

您可以获取文件流,然后将WCF流式数据复制到该文件中。你可以像你在这里发布一样使用。此外,还有一个博客指出如何在WCF中将所有数据读入内存,然后将它们以块的形式发送给客户端。请检查这个链接,看看它是否是可行的您的要求:http://weblogs.asp.net/cibrax/archive/2008/06/10/streaming-large-content-with-wcf-and-deferred-execution。 ASPX#6288340 – Saravanan 2013-05-05 13:16:26