У меня есть служба 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 гб барана.
В этих реализациях похоже, что поток ввода уже существует. Моя проблема заключается в сборе потока из веб-сервиса, я могу записать его на диск. Например, во втором решении я могу использовать его как: Копировать (SsClient.GetFile (FolderId, Helper.GetISession()), targetStream, progressCallback); ? Возвращаемым типом моей функции GetFile является поток btw. –
Вы можете получить поток в файл, а затем скопировать потоковые данные WCF в этот файл. Вы можете использовать, как вы разместили здесь. Кроме того, есть блог, в котором говорится о том, как читать все данные в памяти в WCF, а затем отправлять их клиенту в кусках. Проверьте эту ссылку, чтобы убедиться, что она жизнеспособна для вашего требования: http://weblogs.asp.net/cibrax/archive/2008/06/10/streaming-large-content-with-wcf-and-deferred-execution. ASPX # 6288340 – Saravanan