Asp classic VBScript中的ExecuteGlobal,IIS 5.1(Win XP Pro)上的ASP不工作

Asp classic VBScript中的ExecuteGlobal,IIS 5.1(Win XP Pro)上的ASP不工作,asp-classic,vbscript,iis-6,iis-5,Asp Classic,Vbscript,Iis 6,Iis 5,哪些设置可能丢失或误用,从而导致在IIS 6.0服务器上运行的相同代码在IIS 5.1服务器上失败 我继承了这个大型的经典ASP应用程序。它使用ExecuteGlobal命令缓存一系列包含函数的文件。在这两台服务器上,命令都会正确执行。但是,当应用程序稍后尝试引用“缓存”的函数时,IIS 6.0似乎工作得很好,而IIS 5.1的行为就好像这些函数从未存在过一样,因此我收到了错误 5.1系统用于在XP Pro机箱上进行测试。6.0是我们在Windows 2003上的生产系统 隔离问题花了很长时间,

哪些设置可能丢失或误用,从而导致在IIS 6.0服务器上运行的相同代码在IIS 5.1服务器上失败

我继承了这个大型的经典ASP应用程序。它使用ExecuteGlobal命令缓存一系列包含函数的文件。在这两台服务器上,命令都会正确执行。但是,当应用程序稍后尝试引用“缓存”的函数时,IIS 6.0似乎工作得很好,而IIS 5.1的行为就好像这些函数从未存在过一样,因此我收到了错误

5.1系统用于在XP Pro机箱上进行测试。6.0是我们在Windows 2003上的生产系统

隔离问题花了很长时间,相同的代码在测试中失败,但在生产中使用此代码。不幸的是,设置另一台服务器不是一个选项,因为预算限制——没有钱支付支持人员的费用,也没有钱租用所有服务器都必须位于物理位置的空间——军事安装


我错过了哪些方向?

缓存和使用缓存的函数是在处理同一HTTP请求时发生的吗

如果答案是肯定的,那么我没有任何想法,我真诚地希望其他人能回答你的问题

如果答案是否定的,那么我很确定您的问题是将函数缓存到不同的VBScript执行上下文中

当然,可以在测试服务器上尝试:-在定义函数的文件中添加以下两行:

Dim g_FunctionsLoadedOK
g_FunctionsLoadedOK = "OK"
在使用该函数之前,请看下面一行:

if( Eval( "VarType(g_FunctionsLoadedOK)" ) <> vbString then
    ' Then you're sure there's no 'g_FunctionsLoadedOK' string variable defined in this VBScript execution context,
    ' so maybe you should reload the cached functions, or do something else..
end if

另外,除非你正在处理的系统非常大,为什么不使用ExecuteGlobal方法来代替它呢?

你能发布伪ExecuteGlobal的代码吗?也许可以通过使用Includes对它进行重构,让它做你想做的事情,这样你就不必破坏任何东西了。如果不能做到这一点,可能需要进行一些查找和替换:

谢谢您的建议。include方法是他们过去一直使用的方法,直到页面变得巨大,所以include被包含一个本应模拟require_once PHP功能的例程所取代。这对你的情况没有帮助,但在我看来,为executeglobe替换服务器端include似乎是个坏主意。不仅会丢失所有调试信息,性能也会受到严重影响。ASP文件被编译成字节码,然后存储在缓存中。拥有一个包含大量内容的大型应用程序不会降低应用程序的速度。我们从一个asp文件运行一个巨大的应用程序,使用urlrewriting和许多包含项,它工作起来很有魅力。但是Execute、executeglobal和eval的速度很慢,因为每次调用都需要将字符串编译成字节码。我很想将伪a require_once代码发送到回收站。我认为最初的程序员这么做只是因为他喜欢PHP。我越来越清楚地意识到,我必须想出一个解决方案,消除“ExecuteGlobal”部分。事实证明,事情并不像看上去那样。虽然我得到的错误使它看起来像是没有定义缓存函数,但在页面的VBScript部分的前面放入一些调试代码,该错误在Javascript中发生,表明该函数确实被定义并“记住”。我确实开始尝试用INCLUDEs替换“require_once”,但由于环境不同,这还有其他问题。不过我得到了缓刑。我的老板告诉上级,我们需要一个真正的测试环境,不能一直这样。