如何在C#客户端中使用Stream而不是byte []和Java MTOM Web服务

时间:2013-03-14 23:03:38

标签: c# java web-services cxf mtom

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

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

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

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

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

看到一些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 []调用webservice,客户端将所有数据加载到内存中,甚至在将结果提供给其余代码来处理它之前。使用Stream时,我可以访问webservice的结果,并且可以将Stream的内容写入文件,而无需加载到内存中,从而避免内存不足问题。

0 个答案:

没有答案