1

ファイルを別のftpサイトにアップロードするWindowsサービスがあります。

アップロードを高速化するために、このサービスを 3 台のマシンにインストールしました。次に、3 つのサービスがすべて同じ場所を調べてファイルを取得するため、問題が発生します。同じファイルを取得してから例外がスローされることがあります。

このような状況を回避するにはどうすればよいですか?.net 4.5with方式で設計されたサービスasyncなので、ファイルロックをかけるとパフォーマンスが遅くなるのでしょうか?このように考えているのですが、

  1. ディレクトリ内のすべてのファイル名を取得する
  2. 次に、このコレクションをロックします
  3. どういうわけか、各サービスが異なるサブコレクションを取得するようにします。たとえば、合計 30 ファイルの場合、各サービスは 10 を取得します。

しかし、方法がわからない。

4

2 に答える 2

2

排他的読み取り用にファイルを開くことができます。失敗した場合は、現在別のサービスが処理していることを意味し、次のファイルに移動します。

File.Open("test.txt", FileMode.Open, FileAccess.Read, FileShare.None);
于 2013-09-17T21:07:26.240 に答える
0

キューを作成できます。これは、MSMQ または別のサービスであり、ファイル名を含む db テーブルをロードします。他のサービスは、いくつかのロック テーブルを使用できます。

update table t1 set t1.f1=t1.f1サービスがトランザクションで呼び出す単一のレコードを持つテーブルがあります。これにより、他のサービスの継続が妨げられます。

別のテーブルには、ファイルのリストと、既に取得されている場合のフラグがあります。

これらのファイルを読み取り、ファイル名テーブルをロードするだけの 1 つのサービスを検討してください。他の 3 つのサービス - エンドポイントは、ロック テーブル レコードをロックし、nファイル名の読み取りに進み、取得済みとしてマークします。ファイルが読み込まれると、ファイル名を削除できます。取得と削除の間にサービスが失敗した場合: 次のプロセスの開始時に、タイムスタンプを確認します。たとえば、昨日ファイルが取得され、レコードがまだ存在する場合は、再度処理する必要がある可能性があります。

于 2013-09-17T21:40:41.130 に答える