IISを使用する64ビットのWindows2008Serverにホットフィックス2を適用して、ColdFusion9,0,1,274733を実行しています。
データベーステーブルへのログ記録(ユーザー監査)を処理するcfcを作成しました。基本的に、私はこのcfcをリクエストサイクルのさまざまな時点で呼び出します。アプリケーションの開始時、リクエストの終了時、アプリケーションの終了時、およびエラーが発生したとき。アプリケーションの有効期限が切れるまで、すべてが完全に機能します。
それで、ここに私のApplication.cfcからのいくつかの関連する部分があります。私は次のようなcffunctionの外にあるcfcの場所へのマッピングを定義しています:
this.versionfolder="version1";
this.mappings["/modules"]="C:\Webroot\folder\#this.versionfolder#";
次に、前述のアプリケーションイベントで、次のようにロギングcfcを呼び出すことができます。
<cfinvoke component="/modules/LogIt" method="Store" />
これは、アプリケーションの有効期限が切れるまで正常に機能します。コードがOnApplicationEndメソッドのロギングモジュールに対してcfinvokeを起動すると、次のエラーが発生します。
Message: Could not find the ColdFusion component or interface /modules/LogIt.
Detail: Ensure that the name is correct and that the component or interface exists.
私は、cfcが存在することを知っています。それは、アプリケーションの存続期間を通じてまったく同じ方法でそれを呼び出してきました。他の誰かがこの振る舞いを見たことがありますか?
これにレンチを投げるために、私がこの問題を抱えているアプリケーションはWebルートにあります。この同じサーバーで実行されている別のアプリケーションがあります。このアプリケーションは、このアプリケーションのサブフォルダーにあります(アプリケーション名は異なります)。私はそのApplication.cfcでまったく同じロジックを使用しており、そのアプリケーションのマッピングを介して同じロギングcfcを参照しており、アプリケーション側で正常に機能します。私は困惑していて、この特定のシナリオについてオンラインで何も見つけることができませんでした。
明確にするために、Webルートの私のアプリケーションは、アプリケーションの終了時に毎回失敗します。サブフォルダー内の私のアプリケーションは毎回機能します。これが適切かどうかはわかりませんが、Webルートアプリケーションはサブフォルダーアプリケーションの前に開始(アクセス)されます。私はWebルートアプリケーションをヒットすることだけをテストしましたが、それでも失敗します。コンポーネント名にドット表記を使用しようとしましたが、それでも失敗します。