2010-06-25 190 views

回答

21

如果您使用的是Application.cfc,則可以對其進行更新,以便在url中傳遞特定的內容或類似內容時強制對onApplicationStart()進行調用。只需在onRequestStart()中檢查該魔術標記,如果是,則調用onApplicationStart()。

如果你不是,你可以嘗試@馬科斯的建議。我不確定你的應用程序可能會有什麼後果。我所建議的實際上是重命名你的應用程序,所以它開始作爲一個新的應用程序。

0

我通常會將每個用戶會話的引用放入我的應用程序範圍中的結構中,以監視應用程序中發生了什麼。也許在服務器範圍內做類似的事情可能會有幫助。嘗試:

< CFSET server.runningApplications [「對myApp」] =應用程序/ >

然後,你有該應用程序的範圍之外,以實際的應用對象的引用。你可以嘗試各種破壞性的東西來擺脫它。試試這個需要您自擔風險!在您的生產箱上完成之前,先在開發服務器上執行此操作。 ;)

19

如果你在CF9,運行ApplicationStop()https://cfdocs.org/applicationstop

+6

這是唯一的'正確的'解決方案(你必須在CF9上)。其他的一切都是潛在的線程安全問題的一個可疑的解決方法。 – 2010-06-25 22:34:40

3
<cfset structClear(application) /> 
+0

答案在哪裏? – Henry 2010-06-25 17:49:22

+0

使建議可見。 : - \使用預覽。此外,該建議已經提供。如果您同意,請提出該建議。不要重新提交。 – 2010-06-25 20:54:33

0

使用cfinvoke

<cfinvoke method="onApplicationEnd" component="Application"> 
    <cfinvokeargument name="ApplicationScope" value="#application#" /> 
</cfinvoke> 
+2

我不認爲運行onApplicationEnd()會導致應用程序重新啓動。在CF8/CFMX7上,調用onApplicationStart()是最接近你想要的行爲 - 但要注意它不會是線程安全的:CF會自動調用單個線程到onApplicationStart()當它調用它時,當你打電話時不要這麼做。在CF9上,applicationStop()是正確的方法。 – 2010-06-25 22:33:42

4

在這裏,我來說說,我的CF7/8版本的CF9的ApplicationStop。我相信這是線程安全的,注意到肖恩的評論。

<cffunction name="ApplicationStop" returntype="boolean" output="false"> 
<cfif IsDefined('application')> 
    <cftry> 
    <!--- This is just in case there's no app scope but variables.application ---> 
    <cfset CreateObject('java', 'coldfusion.runtime.ApplicationScopeTracker').cleanUp(application) /> 
    <cfreturn true /> 
    <cfcatch type="any"></cfcatch> 
    </cftry> 
</cfif> 
<cfreturn false /> 
</cffunction> 

正如亨利所說,他是我關於這個問題的博客文章: http://misterdai.wordpress.com/2010/06/14/cf-flag-application-to-run-onapplicationstart-part-2/

3

結束你的應用的微創治療方法是將ApplicationTimeout臨時設置的東西很短。

這是從哪兒應用程序被設置在10秒超時的情況下的Application.cfc文件,這是很多短的做出改變,然後檢查回來的例子:

<cfcomponent displayname="Application"> 
    <cfscript> 
     this.name = "myAppName"; 
     this.setclientcookies="yes"; 
     this.sessionmanagement="yes"; 
     this.sessiontimeout= CreateTimeSpan(0,0,60,0); 
     this.applicationTimeout= CreateTimeSpan(0,0,0,10); 
    </cfscript> 
    ... 
</cfcomponent> 

您可能需要限制會議也是如此。有關深入瞭解應用程序和會話超時的信息,請參閱this article by Ben Nadel

2

如果您正在使用的Application.cfc,你onRequestStart函數的頂部堅持這樣的:

<!--- RESET APP? ---> 
<cfif isdefined("url.reinit")> 
    <cfset OnApplicationStart()> 
    <cfset OnSessionStart()> 
</cfif> 

然後,你可以通過一個URL VAR任何CFM和應用程序將重置。

相關問題