1

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 のコンテンツをメモリにロードせずにファイルに書き込むことができるため、メモリ不足の問題を回避できます。

4

0 に答える 0