2012-01-04 10 views
1

私のWebサイトに必要な特定のファイルセットを上書きするプログラムがありますが、Webサイトのトラフィックが非常に増加しています。ファイルを更新できません。c#上書きファイル、IIS 7.5で使用中のエラーファイル

このプログラムは、指定したファイルを更新するために5分ごとに実行されます。

私は、このプログラムにファイルではなくプログラムの書き込みを扱わせる理由は、(ftpを介して)別のウェブサーバーにも更新する必要があるためです。この方法では、ユーザーがページを閲覧するのではなく、5分ごとにファイルが更新されるようにします。

私の質問はそうです。 IIS7.5にファイルがキャッシュされたことを伝えることができます(例えば、5秒〜1分)。これにより、次回プログラムを実行してファイルを更新するときに問題が発生することはありません。

+0

は('ロックを使用してください:あなたは、ファイルから読み取ることができることを確認するために

最善の方法は、ロックはこの記事を参照してください、あなたのチェックの後に発生する可能性があるため、例外をキャッチすることです。 –

+0

FileSystemWatcherを使用してファイルが更新されたときに通知し、次回の更新が通知されるまでコピーを作成してから読み取る必要があるときに通知することはできません。 – Lloyd

+0

問題のファイルはIISサーバー上にあり、そのサーバーでも使用されています。したがって、それは「使用中」です。 また、FileSystemWatchは、更新をチェックしてファイルをチャージする必要があるIIS Serverについて話しているので、何の効果もないと確信しています。 – Raskaroth

答えて

1

最も簡単な解決策は、ファイルシステムを更新するのではなく、データベースに新しい情報を格納するようにファイルを更新するプログラムを変更することです。

データベースを使用することができない場合、私は別のアプローチを取るでしょう。最後に変更された時間と共にSystem.Web.Caching.Cacheにファイルの内容を保存し、キャッシュされていないバージョンを使用しないとファイルが変更されているかどうかを確認します。変更された場合は、同じキャッシュ変数に新しい内容と時刻を格納します。

もちろん、ファイルを読むことができるかどうかをチェックしてから、キャッシュの内容を更新する必要があります。ファイルを読み取れない場合は、キャッシュから最終バージョンを取得するだけです。

ファイルの初期読み込みは、キャッシュが初期化されていることを確認するためにapplication_startになければならず、ファイルを読み込んで初めてキャッシュに保存するまで待つ必要があります。あなたのコードで `)How to check for file lock?

+0

えええええええ、プログラムはデータベースからの情報の一部を取得しています。私はそのプログラムを使用している理由は、別のWebサーバー上のファイルをudpateすることですが、これはftpを通して何の問題もなく行われています。私はちょうどiisサーバーのためにデータベースからまっすぐにデータを取得します。ありがとう! – Raskaroth

関連する問題