通过SOAP Web服务传输二进制数据?

时间:2010-04-14 23:50:25

标签: c# .net web-services soap binary

我有一个Web服务,它返回一个对象的二进制数组。是否有更简单的方法使用SOAP传输它,还是需要包含在XML中?它工作正常,但我不得不将发送和接收缓冲区增加到一个很大的值。多少钱太多了?

将XML中的二进制文件作为数组传输似乎效率很低,但我看不到任何使用.NET添加二进制附件的方法。

3 个答案:

答案 0 :(得分:4)

作为阵列?你是说你要发送

<byte>8</byte>
<byte>127</byte>

等?如果是这样,那么你可以通过事先将字节数组转换为十六进制字符串来改进它,例如。

<codedArray>087F09AFBD.....</codedArray>

这是通过SOAP发送图像等的最常用方法。但是,即便如此,你也可以质疑它。您应该真正关注其他更多RESTful传输协议,恕我直言。

答案 1 :(得分:2)

在HTTP协议中,您发送一条包含SOAP消息的mime type text / xml消息。 但HTTP协议允许您发送多条消息,例如由消息和附件组成的电子邮件。 那被称为“带附件的肥皂”http://en.wikipedia.org/wiki/SOAP_with_Attachments 它是用mime类型“multipart / related”完成的。

检查有关如何处理WCF http://msdn.microsoft.com/en-us/library/ms733742.aspx

的信息

答案 2 :(得分:1)

实际上,您不应该通过Web服务发送二进制信息。这样做会使使用Web服务的兼容性无效。理想情况下,您将对象序列化为xml。但是,如果您要发送本质上是二进制的信息,比如图像,那么您可以确保将其放在SOAP消息的有效负载中。多少信息实际上取决于您希望等待多长时间以及网络速度。我不相信您可以发送的信息的大小有任何实际限制。如果它真的很多(50兆+似乎是一个任意大的数字),那么你可能希望考虑替代传输协议,如通过套接字流式传输。