0

Web サービスを使用して大きなデータを送信する必要があります。データのサイズは 300 MB から 700 MB の間になります。Web サービスは、SQL データベースからデータを生成し、クライアントに送信します。これは、約 20 ~ 25 個のテーブルを持つ DataSet の形式です。記事「方法: Web サービスで大量のデータを送受信できるようにする」と Microsoft WSE 3.0 のサンプルから解決策を試しましたが、ほとんどの場合、「System.OutOfMemoryException」が発生します。

問題は、WebService がサーバー上のメモリにデータをバッファリングし、制限を超えていることだと思います。

(1)DataTableを1つずつ送信しますが、1つのDataTableに約100MBから150MBのデータを含めることができます(2)サーバーにファイルを書き込み、HttpWebRequestを使用して転送します(FTPは可能ですが、FTPサーバーには現在アクセスできません)

Webサービスを使用してこの問題の回避策を提案できる人はいますか?

ありがとう、

4

1 に答える 1

0

データセットはメモリ内のすべてのデータをロードします。その膨大な量のデータを転送するのには適していません。DataSet は、シリアル化されると多くの追加情報を保持します。

転送する必要があるテーブルの構造がわかっている場合は、一連のSerializableオブジェクトを作成し、それらの配列を送信すると、データ ペイロードを大幅に削減できます。

使用する必要がある場合は、DataSetBinaryRemoting の有効化を検討してください。

BinaryFormatter bf = new BinaryFormatter();
myDataSet.RemotingFormat = SerializationFormat.Binary;
bf.Serialize(s, ResultDataSet);

このような方法でデータ ペイロードを減らした後、http サーバー上のパブリックにアクセス可能な場所にファイルを書き込むことをお勧めします。http でホストすると、クライアントは ftp よりもはるかに簡単にファイルをダウンロードできます。ユーザーに適切な権限を与えることで、これらの http フォルダーへのアクセスを制御できます。

于 2012-10-29T10:54:19.993 に答える