6

我继承了一个经典的 ASP 应用程序。有各种各样的事情需要整理,但我不得不逐渐做事情(我不能对每个脚本都进行全面更改)。

系统中有一些地方带有硬编码的 url。一些脚本必须在升级到 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 不经常更改。

4

1 回答 1

1

我的 ADO Connection 方法如下所示。

'Servername for Application Root Drive
Select Case Left(Request.ServerVariables("PATH_TRANSLATED"), 1)
    Case "c" strSrvr = "80.212.207.211"   'my remote server ip
    Case Else strSrvr = "(local)"         'local Sql instance (my project on D: drive)
End Select

strConn = "Driver={SQL Server};Server="& strSrvr &";uid=DBUSER;pwd=MYPASS;database=MYDATABASE"

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open(strConn)
于 2013-12-03T00:51:50.053 回答