0

我正在寻求改进 WCF 客户端/服务器,以便它处理大量小文件,比现在更快。

我编写了一个 WCF 客户端和一个服务器来跨网络移动文件。

我通过从客户端调用服务器(发送我想下载的文件的名称作为参数),然后让服务器返回一个 Stream

简化示例:

//CLIENT CODE>>
Stream stream = syncService.GetStream(fileName);
//<<CLIENT CODE

//SERVER CODE>>
public Stream GetStream(string fileName)
{
   string filePathOnServer = ServerService.Service1.SERVER_FILES_PATH + fileName;
   return File.OpenRead(filePathOnServer);
}
//<<SERVER CODE

如果我需要获取多个文件,然后我会递归调用 GetStream,并将流保存到客户端计算机上的文件中。它在移动少量大文件时可以接受我遇到的问题是,无论大小如何,下载单个文件的开销约为 1/10 秒;因此,如果我想下载大量 1Kb 的文件,我基本上被限制为最大 10Kbs。

我希望有人对替代实施提出建议。我尝试从服务器返回一个流列表,但我认为 WCF 不允许这样做。

我需要能够在不压缩文件的情况下做到这一点。

我正在考虑尝试返回一个由多个连接的流组成的流,但我不确定是否有更好的方法。

4

1 回答 1

3

我会更改您的 WCF 方法以接受文件名集合(即List<string>string[]),然后将它们打包。我知道SharpZipLib在生成 ZIP 文件方面效果很好。

您将 ZIP 文件流式传输回客户端,客户端将依次解压缩并处理文件。

一个更大的文件应该传输速度快几个数量级,并且带宽更轻(因为您将处理更少的网络相关开销),更不用说您将有一个 WCF 调用而不是每个文件一个的事实(一个巨大的瓶颈)。

于 2013-01-03T14:31:11.850 回答