2

我即将使用 WCF 实现 FileService。它应该能够通过提供文件内容本身和文件名来上传文件。当前的 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 服务是否合理?

4

1 回答 1

0

如果文件大小超过一定数量,最好使用流。在我正在编写的企业应用程序的工作中,如果它大于 16kb,那么我们将其流式传输。如果小于这个值,我们缓冲。我们的文件服务是专门为处理这种逻辑而设计的。

当您将服务的传输模式设置为缓冲时,它会在您传输数据时在客户端和服务上进行缓冲。这意味着如果您要发送一个 300mb 的文件,它将在通话完成之前在两端的通话期间缓冲所有 300mb。这肯定会造成瓶颈。出于性能原因,仅当您有快速缓冲的小文件时才应该这样做。否则,流是最好的方法。

如果您的大部分或所有文件都是较大的文件,我会切换到使用流。

于 2013-07-11T22:55:45.703 回答