【问题标题】:upload files using WCF使用 WCF 上传文件
【发布时间】:2012-10-18 18:12:30
【问题描述】:

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

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

  [OperationContract]
  public void UploadFile(Stream inputsreaam);

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

欢迎提出其他建议

【问题讨论】:

  • 哪些客户将使用该服务?
  • 找不到你吗?客户如何发挥作用。

标签: c# wcf


【解决方案1】:

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

您可能还会发现此tutorial 很有帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多