【问题标题】:What is the best way to transfer an image via a webservice in C#?在 C# 中通过 web 服务传输图像的最佳方法是什么?
【发布时间】:2011-03-20 12:39:54
【问题描述】:

在 C# 中传输图像的最佳方法是什么?

  • 位图对象
  • 字节数组
  • 图像对象?

【问题讨论】:

  • 您指的是哪种网络服务?旧版“.asmx”服务还是 WCF“.svc”服务?

标签: c# image web-services bitmap transfer


【解决方案1】:

没有单一的“最佳”方式。如果有,那么可能只有一种方法。这实际上取决于您的情况、需求和优先事项。

也就是说,我一有机会就使用 Base64 编码,因为它很有趣并且简单! :)

【讨论】:

    【解决方案2】:

    在 WCF 中,您可以从方法返回 Stream 对象:

    public Stream GetImage(string name)
    { ... }
    

    如果您有一个纯基于 SOAP 的协议,您将需要坚持使用像 byte[] 这样的原语。这是一个表现不佳的选择,但确实没有更好的方法。您可能需要将文件分割成多个部分,以使其适用于所有客户端。一些 SOAP 客户端不允许大响应,因此我们过去将响应分成 30k 块。

    传输图像的最佳方法是不使用上述任何一种方法,而是直接对图像执行 HTTP 请求并避免所有这些。这就是我们现在使用的,没有编码,没有客户端处理,直接流式传输到磁盘。您必须检查您的特定用例以确定是否可以应用。

    【讨论】:

      【解决方案3】:

      我最近使用 WCF 服务实现了这一点,并选择使用 Byte[] 作为传输文件的方法,因为它实现起来非常简单:

      public byte[] DownloadFile(string fileName)
      {
          var stream = System.IO.File.OpenRead(fileName);
      
          byte[] fileContent = new byte[stream.Length];
          stream.Read(fileContent, 0, fileContent.Length);
      
          return fileContent;
      }
      

      上面的例子被简化了,因为我没有将文件名直接传递给 WCF 服务,但我相信你明白了一般的想法 =)

      【讨论】:

        【解决方案4】:

        您也可以只返回图像的 URL,然后让客户端对返回的 URL 进行原始 HTTP 调用以获取图像。

        谢谢
        虚拟机

        【讨论】:

        • 如果是关于将图像传输到另一个服务器/服务,则不是
        猜你喜欢
        • 2011-03-04
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多