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

时间:2013-04-15 10:20:18

标签: c# wcf streaming

我的问题是,当客户端调用服务器上的方法来获取具有特定位置的流时,流每次都会有一个位置= 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);

Part.From值不为0。 但返回的流回来时位置为vlaue 0。

1 个答案:

答案 0 :(得分:1)

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

他们获得的是您的内容(从Position开始)流式传输到他们,因此他们从0开始获得一个流,其中包含原始流中数据的尾部。

基本上:您无法返回对流的引用。你得到了内容的副本。

你究竟想做什么?

更新:如果要返回文件的某个部分,可以使用byte[]。无论如何,这基本上都是通过电线的。这种方法的缺点是你必须将块读入服务器的内存中。

因此,作为优化,您仍然可以返回Stream。此流可以包装您要返回的文件部分。请注意,它始终从零位开始。