如何通过wcf发送具有特定位置的流?

本文关键字:位置 定位 wcf 何通过 | 更新日期: 2023-09-27 18:09:17

我的问题是,当客户端在服务器上调用一个方法来获取一个位于特定位置的流时,每次流都以position = 0来。

我能做什么?

服务器方法:

public Stream SearchTorrent(int TorrentID, int Position)
        {
            string FilePatch = ClientBusinessLogic.MyTorrents().Where((MyTorrent1) => MyTorrent1.TorrentID == TorrentID).ToList().First().Patch;
            Stream File = new FileStream(FilePatch, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            File.Position = Position;
            return File;
        }

客户的方法:

Stream SeederFile = this.SeederInterface.SearchTorrent(TorrentID, Part.From);

部分。From value不为0。但是返回的流的位置值为0。

如何通过wcf发送具有特定位置的流?

从服务器方法返回的Stream不是通过对客户端的引用返回的。也就是说:他们没有得到你的流。

他们得到的是你的内容(从Position开始)流到他们,所以他们得到一个从0开始的流,数据的尾部来自你的原始流。

基本上:你不能返回对流的引用。你会得到内容的副本。

你到底想做什么?

更新:如果你想返回文件的一部分,你可以使用byte[]。这基本上就是通过电线传递的内容。这种方法的缺点是您必须将块读取到服务器的内存中。

因此,相反,作为优化,您仍然可以返回Stream。该流可以包装要返回的文件部分。注意,它总是从位置0开始