3

Web サービスと通信する C# .NET アプリケーションを継承しました。Web サービスは Oracle データベースと通信します。UI にエクスポート機能を追加して、一部のデータの Excel スプレッドシートを作成する必要があります。

データベース クエリを実行し、データを DataTable にロードしてから返す Web サービス関数を作成しました。これは、少数の行に対して正常に機能します。ただし、完全な実行には十分なデータがあるため、クライアント アプリケーションは数分間ロックし、タイムアウト エラーを返します。明らかに、これはそのような大規模なデータセットを取得する最良の方法ではありません。

通話を分割する危険な方法を考え出す前に、これを処理できる何かがすでに用意されているかどうか疑問に思っています。現時点では、startExport 関数を考えてから、データがなくなるまで next50Rows 関数を繰り返し呼び出しますが、Web サービスはステートレスであるため、何らかの ID 番号を保持して処理する必要があります。関連する権限。これは、データ セット全体を Web サーバーのメモリにロードする必要がないことを意味しますが、これは良いことの 1 つです。

したがって、ASMX Web サービスを介して大量のデータ (テーブル形式) を取得するより良い方法を誰かが知っている場合は、お知らせください。

4

6 に答える 6

6

これとまったく同じビジネス シナリオが数年前にありました。

  1. 転送されるデータ量を制限してみてください
  2. n 個のテーブルを転送する場合は、それらを n 個のデータ テーブルに分割し、一度に 1 つのデータ テーブルを転送します。
  3. 転送する前に、データセット/データテーブルを圧縮してください。これは非常に大きな(巨大な)影響を与えます。反対側では、バイト ストリームを解凍してデータセット/データテーブルに戻します。.NET のビルトイン圧縮も使用しないでください - SharpZipLib を使用してください。それははるかに良い結果をもたらします。
  4. また、転送を非同期で実行して、クライアントがロックアップしないようにすることもできます。

当社のお客様は、何年もの間、問題なく上記のソリューションを使用してきました。

于 2010-06-16T01:40:48.173 に答える
2

私は WCF Data Services (または現在呼ばれているもの) をお勧めします。(Web サービスの両側に .NET がある場合) oData エンドポイントを公開して、透過的な要求スロットリングを提供できます (サーバーは 1 回の呼び出しでの応答数を制限し、クライアントは必要に応じて追加の要求を自動的に作成します)。また、IQueryable非常に柔軟なスタイルのインターフェースも提供します。

于 2010-06-16T03:51:23.880 に答える
2

Web サービスを非同期で呼び出したいだけだと思われるので、すべての処理中にアプリケーションが UI でブロックされることはありません。http://msdn.microsoft.com/en-us/library/ms233842.aspxを見て、役立つかどうかを確認してください。

于 2010-06-16T01:32:47.003 に答える
2

長時間実行されるクエリを問題なく処理する SSRS にタスクをオフロードすることをお勧めします。レポート ビルダーでレポートを作成し、.NET アプリを使用して SSRS Web サービスを呼び出し、レポートを実行し、結果を Excel 形式で (バイト配列として) エクスポートすることができます。.asmx サービスを使用したサンプル コードについてはこのページ、WCF で SSRS を呼び出す方法についてはこのページを参照してください。

また、UI を拘束しないように、別のスレッドで Web サービスを呼び出す必要があります。

于 2010-06-16T01:35:32.457 に答える
2

MSDN ライブラリの「ラージ データとストリーミング」を参照してください。

大規模なデータ転送のパフォーマンスに関心がある場合は、ASMX Web サービスを使用しないでください。

于 2010-06-16T01:42:08.850 に答える
0

問題はよくあることです。ユーザーに返すデータがたくさんあります。

運が良ければ、Web サービスのタイムアウトを増やすことで回避できる場合があります。それ以外の場合、一度に 1 ページ分のデータをユーザーに返すソリューションは、要件に適していますか? この設計では、呼び出し元は、開始ページと、Web サービスへのページあたりのデータ行数を指定する責任があります。

ページネーション クエリページネーションのヒントを参照してください。

ただし、Web サービスをソリューションとして使用することに制限されていない場合は、Reporting Services をユーザーに提供することを検討することをお勧めします。この代替オプションを調査する価値は間違いなくあります:)

于 2010-06-16T03:41:51.977 に答える