我即将使用WCF实现FileService。它应该能够通过提供filecontent本身和文件名来上传文件。当前的ServiceContract如下所示
[ServiceContract]
public interface IFileService
{
[OperationContract]
[FaultContract(typeof(FaultException))]
byte[] LoadFile(string relativeFileNamePath);
[OperationContract]
[FaultContract(typeof(FaultException))]
void SaveFile(byte[] content, string relativeFileNamePath);
}
目前工作正常,但我希望能够使用此Fileservice减少应用程序的网络负载。一旦用户打开我的应用程序的特定部分,我就需要提供许多文件,但是一旦用户进一步浏览应用程序,我就可以取消其中一些文件。由于许多我的文件大约在50到300 MB之间,因此传输文件需要相当长的时间(应用程序可能在非常慢的网络上运行,可能需要一分钟)。
澄清并概述与所有其他WCF问题的区别:具体问题是在客户端< - >之间提供数据。服务器是瓶颈,而不是服务本身的性能。将接口更改为流式WCF服务是否合理?
答案 0 :(得分:0)
如果文件大小超过一定数量,最好使用流。在我正在编写的企业应用程序的工作中,如果它大于16kb,那么我们流式传输它。如果它小于那个,我们缓冲。我们的文件服务专门用于处理这种逻辑。
当您将服务的传输模式设置为缓冲区时,它将在您传输数据时缓冲客户端和服务上的缓冲区。这意味着如果您要发送300mb文件,它将在呼叫完成之前在呼叫期间缓冲所有300mb。这肯定会造成瓶颈。出于性能原因,这应该仅在您拥有快速缓冲的小文件时。否则,流是最好的方式。
如果您的大多数或所有文件都是较大的文件,我会切换到使用流。