【发布时间】:2013-01-03 14:17:15
【问题描述】:
我正在寻求改进 WCF 客户端/服务器,以便它能够处理大量小文件,比目前更快。
我编写了一个 WCF 客户端和一个服务器来跨网络移动文件。
我通过从客户端调用服务器(将我要下载的文件名作为参数发送)然后让服务器返回一个流来使其工作
简化示例:
//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 不允许这样做。
我需要能够在不压缩文件的情况下执行此操作。
我正在考虑尝试返回一个由多个连接的流组成的流,但我不确定是否有更好的方法。
【问题讨论】:
-
为什么不将文件列表作为参数传递并在单个流中返回所有文件。只需在流中为每个文件添加一个文件长度,然后解析和拆分返回的数据。
-
@Pete 感谢您的回复。这就是我目前正在考虑的,但我认为可能会有更好的选择。我将尝试编写代码,同时等待看看是否有人有其他建议。
-
您不指定托管服务的方式,但如果托管在 IIS 中,则必须为每个 WCF 方法调用创建并打开 HTTP 连接。当您处理大量呼叫时,会有很多开销。
-
@Pete 是的,没错。我认为这是我的大部分开销所在,所以我肯定需要减少函数调用的数量。
标签: c# wcf client-server