3

我需要一个 WCF 服务来按用户上传大文件。

以下哪一项提供了更优化的性能

  [OperationContract]
  public void UploadFile(Stream inputsreaam);

或者

   [OperationContract]
   public void UploadFile(byte[] buffer);

欢迎任何其他建议

4

2 回答 2

4

如果您想上传非常大的文件,请使用 Stream 之一。如果您将 2 Gb 文件作为 byte[] 传输,它将被加载到服务器上的内存中,并且只有您可以将其保存在某处。使用 Stream,您可以从客户端流中读取并写入服务器上的文件或 DB 流,而实际上只有小块数据在内存中。回到性能:对于非常大的文件和多个客户端 byte[] 可能会因为内存不足而冻结您的服务器。

您可能还会发现本教程很有帮助。

于 2012-10-18T18:27:27.907 回答
2

通常,第一个(Stream参数)。如果您正在使用Stream参数,并且您正在使用带有 WebHttpBinding / WebHttpBehavior 的端点(即,Web 或 REST 端点),那么 Stream 参数将绑定到整个请求正文,没有编码。在这种情况下,如果您使用第二个 ( byte[]),则必须根据格式将参数编码为数组(对于 XML,编码为 base64 的字节;对于 JSON,表示字节的实际数字数组)。

但是,如果您没有使用 Web 端点(即,您使用的是 SOAP 端点),那么两者非常相似,因为 Stream 或 byte[] 参数将绑定到SOAP body,而 SOAP消息已经编码。

于 2012-10-18T18:21:55.983 回答