私はサーバー側で計算を行っているいくつかのソフトウェアに取り組んでいます。私はBackgroundWorkerを使用してみましたが、ファットクライアントからWebサービスに切り替えようとするまでは完全に正常に機能していました。「BackgroundWorkerはSerializableとしてマークされていません」というエラー(同僚の話ですでに予想していた)が発生しました。私のアプリケーションの目標は、計算の進行状況と現在計算されているレコードの名前でクライアントを更新することです。必要に応じてコードを投稿できますが、この場合、それが問題に本当に関連しているとは思えません。私が達成しようとしていることのスキームは、次のように示すことができます。
- クライアントが「準備」ボタンを押す
- サーバーが電話を受ける
- サーバーがデータを送信します
- クライアントは確認のためにレコードリストを受け取ります
- クライアントが選択を確認します(次に、バックグラウンドワーカーを設定し、サーバーに送信します)
- サーバーが呼び出しを取得します(バックグラウンドワーカーの参照と、一度に計算するために必要なすべてのレコードを受信します)
レコードを実行するループ(各計算には約1〜3秒かかります)を使用して、BackgroundWorkerのステータスを次のように更新します。
worker.ReportProgress(i * 100 / ids.Length, "Currently counting: " + id + "..."); Calculate(ids[i]); worker.ReportProgress((i+1) * 100 / ids.Length, "Currently counting: " + id + "...");
Webサービスでも作業しようとしていることを達成する方法はありますか? BackgroundWorkerをだましてSerializableにする必要があると思いますか、それともサーバーからクライアントにステータスを更新する他の方法がありますか?
PS私はサーバーからあまり多くのデータを送り返していません(実際にはidのみのようにさらに少ないデータを送信しようとすることもできます)ので、過負荷の問題にはならないと思います。