0

サーバー上のデータにアクセスするデスクトップアプリケーションを維持しています。複数のユーザーが同じファイルにアクセスできます。_lopen(Cライブラリ関数)を使用して取得するファイルを開くライブラリがあります。常にSHARE_DENY_NONEで読み取り専用を開きます。パフォーマンスを向上させるために、ユーザーがアプリケーションを終了するまでファイルを開いたままにします。それはファイルが閉じられるときです。ただし、20分以上アクティビティがない場合、サーバーへの接続が失われます。その場合、接続を開始してファイルを再度開きます。接続が失われたときに呼び出されるファイルクローズ操作があると思われますが、ファイルクローズが呼び出されたという証拠はありません。

残念ながら、ユーザーは1日に1〜2回、ファイルを開くことができないというエラーメッセージを受け取ります。これは、ファイルがロックされているため、エクスプローラーでも開くことができないためだと考えられます。エラーをクリアする唯一の方法は、IISRESETを呼び出して、取得するすべてのファイルハンドルがクリアされるようにすることです。しかし、今日、一般的なファイルオープンエラーであるエラーメッセージが表示され、エクスプローラーでファイルを開くことができ、アプリプールをリサイクルすることで問題を解決することもできました。

一部のユーザーは、何かを実行する前にアプリケーションを起動するとすぐにファイルオープンエラーが発生するため、この問題は他のユーザー(またはプロセス)がファイルをロックしていることが原因であると考えられます。エラーを再現することはできません。

ソースコードを確認して、ファイルがどのように開かれるかを確認しました。Process Explorerを確認しましたが、ファイルには常にソフトウェアからアクセスします。プロセスモニターを確認したところ、ファイルが開かれ、他のユーザーによる読み取り/書き込み操作が許可されており、アプリケーションが閉じられるとファイルが閉じられることがわかりました。開発サーバーではエラーが発生することはなく、本番サーバーでのみエラーが発生します。1000人の異なるユーザーでファイルを1000回開くテストプログラムを使用してエラーを複製することはできないため、エラーは多数のユーザーに依存しません。また、9人のユーザーだけでエラーが発生しました。

誰かが試してみる追加のテストや、この問題が発生する可能性のある追加の理由を提案してくれることを願っています。

4

0 に答える 0