如何通过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。
从服务器方法返回的Stream
不是通过对客户端的引用返回的。也就是说:他们没有得到你的流。
他们得到的是你的内容(从Position
开始)流到他们,所以他们得到一个从0开始的流,数据的尾部来自你的原始流。
基本上:你不能返回对流的引用。你会得到内容的副本。
你到底想做什么?
更新:如果你想返回文件的一部分,你可以使用byte[]
。这基本上就是通过电线传递的内容。这种方法的缺点是您必须将块读取到服务器的内存中。
因此,相反,作为优化,您仍然可以返回Stream
。该流可以包装要返回的文件部分。注意,它总是从位置0开始