0

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ルートアプリケーションをヒットすることだけをテストしましたが、それでも失敗します。コンポーネント名にドット表記を使用しようとしましたが、それでも失敗します。

4

2 に答える 2

0

アプリケーションが終了した後に onApplicationEnd が発生するため、アプリケーション スコープは使用できなくなります。サブ アプリケーションは、その onApplicationEnd メソッドが起動したときにサブフォルダーにあるため、親アプリケーション スコープに引き続きアクセスできます。

Use the ApplicationScope parameter to access the application scope; you cannot reference the scope directly; for example, use Arguments.ApplicationScope.myVariable, not Application.myVariable.-ドキュメント

于 2012-09-06T13:10:25.547 に答える
0

ここで同じことを尋ねる別の質問を見つけたので、これについていくつか調査しました。

私の調査結果は、Application.cfc-set マッピングが onApplicationEnd() (実際には CF8 の onSessionEnd()) で機能しないという結果になる CF8-10 にあるということでした。回避策は、CFAdmin でマッピングを設定することです。残念ながら、回避策はあまりありません。

于 2012-11-03T22:01:57.307 に答える