2013-05-05 1 views
0

У меня есть служба wcf, которая посылает мне потоки (обычно большие). В качестве клиентского приложения моя роль - получить поток поверх WCF и сохранить его на диск. Я написал код, но кажется, что сначала передаем поток в плунжер, а затем записываем его на диск из 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(); 
} 

Надеюсь, я мог бы объяснить свою проблему достаточно ясно. Извините меня за мой английский.

Я не против использования ram для буферизации или что-то в этом роде, я просто не хочу, чтобы он заполнялся потоками по 1-2 gb каждый раз, поскольку это давало бы клиентам сложные компьютерные времена, если бы оно просто 2 гб барана.

ответ

0

Вы проверяли следующие сообщения

How to Save a Stream

и

Writing large stream to a file

Дайте нам знать, упаковывают любые запросы на этих реализациях.

+0

В этих реализациях похоже, что поток ввода уже существует. Моя проблема заключается в сборе потока из веб-сервиса, я могу записать его на диск. Например, во втором решении я могу использовать его как: Копировать (SsClient.GetFile (FolderId, Helper.GetISession()), targetStream, progressCallback); ? Возвращаемым типом моей функции GetFile является поток btw. –

+0

Вы можете получить поток в файл, а затем скопировать потоковые данные WCF в этот файл. Вы можете использовать, как вы разместили здесь. Кроме того, есть блог, в котором говорится о том, как читать все данные в памяти в WCF, а затем отправлять их клиенту в кусках. Проверьте эту ссылку, чтобы убедиться, что она жизнеспособна для вашего требования: http://weblogs.asp.net/cibrax/archive/2008/06/10/streaming-large-content-with-wcf-and-deferred-execution. ASPX # 6288340 – Saravanan

Смежные вопросы