CXF で生成され、MTOM が有効になっている Java Web サービスがあります。
Java 側では、byte[] の代わりに DataHandler を使用して大きなファイルを送信しています。
Java クライアントを生成すると、正常に動作し、クライアントでも DataHandler が宣言されます。
問題は、C#.net クライアントを作成しようとしたときです。
Visual Studio 2010 を使用してクライアント コードを生成し、フィールドを Stream ではなく byte[] として宣言します。これは問題です。クライアント側では、すべてのデータを読み取って割り当てて byte[] を埋めるためです。
MTOM と C# の例を見ると、byte[] の代わりに Strem を使用しています。
C# で byte[] の代わりに Stream を使用するクライアント コードを生成するにはどうすればよいですか?
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 のコンテンツをメモリにロードせずにファイルに書き込むことができるため、メモリ不足の問題を回避できます。