3

大きなファイルを転送しているWCFサービスがあります。

現在、クラスのインスタンスのリストでシングルトンサービスを使用して、状態を保持し、転送の進行状況などを求めるクライアントの要求に応答しています。

インスタンス化されたクラス自体は、必要に応じて転送ごとに新しいスレッドを処理します。

転送要求を追加して進行状況を要求するクライアントは、その間に切断し、要求に対してランダムな時間に再接続できます。

また、いくつかの異なるクライアントが、進行中のすべての転送の進行状況を要求したい場合があります。

すべてがそのままうまく機能していますが、これを行うためのより良い方法があると確信していますか?

どういうわけかSQLに状態を保存しますか?現在行っている状態を保存し、どういうわけか同じインスタンスに再接続していますか?では、すべてのインスタンスからデータを取得するにはどうすればよいですか?

私のかなり長い質問を理解していただければ幸いです:)

4

1 に答える 1

2

yor WCFサービスのインスタンスが1つしかない場合、Yorソリューションはうまく機能します。

ロードボールレーシングを使用して複数のインスタンスをインスタンス化する場合、そのアプローチは機能しません。
このような場合、状態を維持する必要があります。これは、すべてのインスタンスに共通する場所です。SQL、状態サーバー、状態を維持できる別のWCFサービスなどが考えられます。

更新
ファイル転送タスクごとにIDを生成する必要があります。次に、Singletoneはidを転送を行うインスタンスに関連付けることができます(Executorと呼びましょう)。
クライアントが進行状況を取得したり、転送をキャンセルしたりする場合は、シングルトーンを要求し、タスクIDを提供します。
シングルトーンは、タスクIDを使用して、実際のエグゼキューターとforvardクライアントの要求を適切なエグゼキューターに解決する必要があります。

その結果、必要な数のエグゼキュータをインスタンス化できるようになります。クライアントは、どのExecutorがファイルを正確に処理するかを心配する必要はありません。クライアントが知っておくべきことは、タスクIDです。

于 2012-11-22T20:56:02.763 に答える