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

5

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

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

2
你指的是哪种网络服务?传统的“.asmx”服务还是WCF的“.svc”服务? - Rob
4个回答

6

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

话虽如此,我会尽可能地使用Base64编码,因为它既有趣又容易! :)


2
在WCF中,您可以从方法中返回一个Stream对象:
public Stream GetImage(string name)
{ ... }

如果你使用的是纯SOAP协议,你需要坚持使用像byte[]这样的原始数据类型。这是一种性能较差的选项,但实际上并没有更好的方法。你可能需要将文件分成多个部分以使其适用于所有客户端。由于一些SOAP客户端不允许大型响应,因此我们曾经将响应分成30k的块。

传输图像的最佳方式是不使用以上任何一种方法,而是直接向图像发出HTTP请求,并避免所有这些麻烦。这是我们现在使用的方法,无需编码、无需客户端处理,直接流式传输到硬盘。你需要检查你的具体用例以确定是否可以应用此方法。


1

我最近使用了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 服务传递文件名,但是我相信你已经有了大致的想法=)


0

你也可以只返回图像的URL,然后让客户端发起原始HTTP调用以获取图像。

谢谢
VM


不涉及将图像传输到另一个服务器/服务。 - BerggreenDK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接