1

我有一个使用 CXF 生成的 java webservice,并启用了 MTOM。

在 java 方面,我使用 DataHandler 而不是 byte[] 来发送一个大文件。

如果我生成一个 Java 客户端,它工作正常,也在客户端上声明 DataHandler。

问题是当我尝试创建 C#.net 客户端时。

使用 Visual Studio 2010 生成客户端代码,它将字段声明为 byte[] 而不是 Stream。这是一个问题,因为在客户端它正在读取和分配所有数据以填充字节 []。

看到 MTOM 和 C# 的一些示例,他们使用 Strem 而不是 byte[]。

如何生成客户端代码以在 C# 中使用 Stream 而不是 byte[]?

这是使用 mtom 的 wsdl 部分:

<xs:complexType name="wsDtoCampoRespostaFotografia">
<xs:complexContent>
<xs:extension base="tns:wsDtoCampoResposta">
<xs:sequence>
<xs:element xmlns:ns4="http://www.w3.org/2005/05/xmlmime" minOccurs="0"   name="valorRespostaFotografia" ns4:expectedContentTypes="application/octet-stream" type="xs:base64Binary"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>

编辑:我遇到的问题是内存分配。当读取大量记录,或读取大文件的记录时,客户端会抛出异常(由于内存分配)。

使用 byte[] 调用 web 服务,客户端将所有数据加载到内存中,甚至在将结果提供给其余代码来处理它之前。使用 Stream 时,我可以访问 web 服务的结果,并且可以将 Stream 的内容写入文件,而无需加载到内存中,避免内存不足的问题。

4

0 回答 0