我正在寻找改进的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文件,我基本上被限制在最大10Kb。
我希望有人有一个替代实现的建议。我已经尝试从服务器返回一个流的列表,但我猜WCF不允许这样做。
我需要在不压缩文件的情况下做到这一点。
我正在考虑尝试返回一个由多个连接的流组成的流,但我不确定是否有更好的方法。
发布于 2013-01-03 22:31:12
我会将WCF方法更改为接受一个文件名集合(例如,List<string>或string[]),然后将它们打包。我知道SharpZipLib在生成ZIP文件方面做得很好。
您将ZIP文件流式传输回客户端,然后客户端将其解压缩并处理这些文件。
一个更大的文件传输速度应该快几个数量级,带宽也会更小(因为你会处理更少的网络相关开销),更不用说你会有一个WCF调用而不是每个文件一个WCF调用(一个巨大的瓶颈)。
https://stackoverflow.com/questions/14140646
复制相似问题