在 WCF 中流式传输或缓冲大文件

Stream or buffer big files in WCF

我想通过 WCF tcp 协议传输大文件,但我不知道应该使用哪种技术:bufferingstreaming.

我想异步传输文件并在进度条控件中显示进度。

流式处理看起来更好,因为我不知道如何组织 4 Kb 的缓冲区和 read/write 异步递归方法。 我应该将此方法 return 类型转换为 Task<Stream> 并调用它吗?

private void test()
{
    Stream _stream = new FileStream("D:\123.avi", FileMode.Open);
    using (FileStream fileStream = new FileStream("D:\123\123.avi", FileMode.Create))
    {
        _stream.CopyTo(fileStream);
    }
}

更新 好的,我已经做过类似的事情了:

    public Task<Stream> GetFileStream(string path)
        {

            Stream _stream = new FileStream(path, FileMode.Open);


            var taskSource = new TaskCompletionSource<Stream>();
            taskSource.SetResult(_stream);
            return taskSource.Task;
        }
        void GetFile()
        {
            FileStream fileStream = new FileStream("D:\123\123.avi", FileMode.Create);

            GetFileStream(@"D:\myFile.mkv").Result
                .CopyTo(fileStream);
        }
private void BtnButton_Click(object sender, RoutedEventArgs e)
        {
            Task task = new Task( () => { GetFile(); } );
            task.Start();

        }

如何将这个进程绑定到ProgressBar?

如果您要传输非常大的文件,那么流式传输绝对是您的不二之选。缓冲将很快成为瓶颈。但是,无论何时处理性能和可伸缩性,您都应该始终测量两次并削减一次。

这是一篇不错的 MSDN 文章,涵盖了 Buffering vs Streaming in WCF 的主题:

https://msdn.microsoft.com/en-us/library/ms733742(v=vs.110).aspx

关于显示进度条,从 WCF 服务读取响应流块时计算进度应该很容易。

但是,您的问题仍然太宽泛,无法用更详细和具体的代码来回答。