【发布时间】:2013-12-11 18:43:38
【问题描述】:
我继承了一个经典的 ASP 应用程序。有各种各样的事情需要整理,但我不得不逐渐做事情(我不能对每个脚本都进行全面更改)。
系统中有一些地方带有硬编码的网址。一些脚本必须在升级到 live 之前进行更改,以便将测试 web 根名称更改为实时 web 根名称。我正在寻找避免这种情况的方法(基本上以编程方式计算服务器)。
这并不难。对 Request("SERVER_NAME") 和这类事情的简单检查:
appName = Request.ServerVariables("SCRIPT_NAME")
i = InStr(2, appName, "/") 'keep initial "/"
If i > 0 Then
appName = Left(appName, i)
End If
这在“无处不在”的脚本中可以解决问题。然后只需设置一个全局变量来保存完整的“http(s)://server/app/”或 MakeUrlAbsolute() 的函数即可。
但是,我觉得这有点可疑。这不是更好地存储在应用程序级别吗?这建议在 Global.asa 中设置它,例如:
Sub Application_OnStart()
Application("WebRoot") = ...
End Sub
但现在我无法获取 SERVER_NAME,因此我只剩下 2 个不同的 Global.asa 文件(每个环境一个)。
这是我唯一的选择吗?解决 Application_OnStart 中的每个请求或硬代码? 也许使用 Session_OnStart 会是一种妥协。或者是否有一些巧妙的技巧可以访问 Application_OnStart 中的信息?也许人们会选择硬编码,因为 Global.asa 不经常更改。
【问题讨论】:
-
我会说为您的开发和生产服务器单独的 global.asa 文件是一种非常标准的方式。例如,我总是将我的 connectikon 字符串存储为应用程序变量,并在需要连接到数据库时使用 Application("dbcconn")