2009-01-30 47 views
2

在传统的ASP不起作用,使用Server.Mappath()并不总是正确的Application_OnStart事件的global.asa内工作。我在“\ testfolder \ test.asp”的虚拟根目录中有一个ASP页面,我有一个XSLT文件,位于“\ xsl \ transform.xsl”。我的虚拟根位于“c:\ inetpub \ wwwroot \ testapp \”经典ASP使用Server.Mappath()如预期中的global.asa

我在ASP页面中使用MapPath来获取XSLT文件的完整路径。电话是:

sXslPath = Server.MapPath("xsl\transform.xsl") 

有些时候,在MapPath返回“C:\的Inetpub \ wwwroot的\ testapp \ XSL \ transform.xsl”如预期,其他时候,它错误地返回“C:\的Inetpub \ wwwroot的\ testapp \ testfolder \ xsl \ transform.xsl“。不正确的路径显然导致严重的问题。

回答

2

我在这里回答我的问题:发生

此问题是由于Application_OnStart调用时,的MapPath错误地包括导致应用程序启动时,页面的上下文。如果应用程序尚未启动时要运行的第一个ASP页面不在虚拟根目录的根目录中,则MapPath会感到困惑,并将被调用的ASP页面的路径添加到其返回的路径中。

因此,举例来说,如果启动该应用程序的页面是“C:\的Inetpub \ wwwroot的\ testapp \文件夹1 \文件夹2 \ TEST.ASP”然后在MapPath会错误地添加“\文件夹1 \文件夹2”成道路中间,并返回“C:\的Inetpub \ wwwroot的\ testapp \文件夹1 \文件夹2 \ XSL \ transform.xsl”

如果您的网站只有在根文件夹有文件或不使用的MapPathglobal.asa那么你永远不会注意到这个小怪事。我怀疑有很多ASP Classic网站因为这个原因而无法正常启动,但是它们的所有者只是做了一个快速的iisreset,不知道出了什么问题。

这样做的结果是,你不能可靠地使用的MapPath的global.asa,如果你有一个网站,有ASP文件的任何地方不仅仅是根文件夹等。

如果是一次性网站,那么最简单的解决方案就是硬编码您在global.asa中使用的任何路径。

如果您基于ASP Classic向其他人销售产品,那么硬编码路径不是一种选择。您必须将MapPath的所有用法移出应用程序启动,或通过将路径作为安装程序的一部分写入ASP文件来处理该问题。

0

替代地使用 sXslPath =使用Server.Mappath( “\ XSL \ transform.xsl”)

然后将从根目录

自然,如果你在IIS在OS显影映射路径这不是服务器,根将是默认网站,你将不得不记得改变部署...