2

免责声明,我是我公司的技术支持和系统管理员,而不是开发人员。我不是在追求细节,只是想知道我想要实现的目标是否可行。

我们托管了数百个内部经典 ASP 遗留电子商务软件应用程序实例,由于客户和我们自己进行了无数次定制,版本管理是噩梦,无法管理自定义代码,我们已经放弃发布新功能和大规模部署由于无法跟踪谁需要哪些补丁而导致的错误修复。

与这个问题相似,我正在制作管理脚本以更好地自动化它。

但是,我真正想做的是尽最大努力,将应用程序代码(而不是数据库)移植到单个代码库。我的问题:

  • ASP 能否根据被调用的主机头相对有效地处理连接到不同的数据库?我计划对例程进行一些基本扩展,在 metadb 中获取 hostheader 查找数据库凭据,相应地设置应用程序连接字符串逻辑。

  • 该应用程序将一些文件从数据库写入网络服务器以用于缓存目的,我想通过将其写入 /masterapp/customer1/specificfile.htm 之类的内容来模拟此行为来处理此问题,然后将引用更改为 /specificfile.htm在代码中更像 /masterapp/商店名称/specificfile.htm。显然,编写 specificfile.htm 的例程会相应地写入新位置。这看起来合理吗?

  • 其他 webserver-bound 存储特定内容,如图像和 csv 文件,我需要在不改变 URL 的情况下继续工作,ASP 是否可以使用逻辑将 /images/example.jpg 的 get 请求重定向到 /masterapp/商店名称/images/example.jpg或 / shopname /images/example.jpg 再次取决于主机头?或者可以通过 isapirewrite 来完成吗?(我们已经使用过)

我认为这些是最大的挑战。我不需要一个完整的项目计划来说明如何实现这些事情,我只是想知道这是否可能。如果答案是“是”,由于节省了支持时间,我应该能够向我的老板出售开发项目,而我们的内部开发人员有望管理这一点。

4

1 回答 1

0

应该是可能的,而且我从一开始就以这种方式开发的代码也取得了类似的结果。当您对其进行改造时,它会变得更加困难,但这与您的实际问题是分开的。

要回答您的实际观点:

  • 大概您的数据库连接字符串已经在应用程序变量或设置文件中?如果是这样,您只需要 global.asa Session_OnStart 中的一些逻辑来读取主机标头并选择适当的数据库字符串。这可以是硬编码的,或者您可以拥有一个“控制”数据库来存储站点、它们的数据库字符串文件路径等,并将详细信息提取到会话对象中。

  • 这与上面有关,从数据库中拉出您的缓存存储位置,或者为每个站点设置一个“目录名称友好”的基本名称,这样您就可以拥有"/masterapp/" & Session("strSiteBaseName") & "/cache/somefile.htm"

  • 如果您使用的是 IIS7,那么您可以使用 URL 重写模块来处理此问题,如果您使用的是 IIS6,则可以使用 3rd 方工具为您进行 URL 重写。我再次这样做了,因此可以保证它可以正常工作。如果您想变得非常聪明,您可以让您的主应用程序为您创建重写文件并“触摸”web.config 以将它们加载到 IIS 中。

主机标头的一个“陷阱”是记住处理 www 和 no-www 记录!

您还提到了每个站点的自定义代码,我没有在生产中这样做,但在应用程序之外进行了测试,您可以在声明函数后重写函数。您不能包含变量名称,但您可以加载文本文件并执行它,因此有一种方法可以使用自定义函数,或更改特定于您的总体应用程序的单个实例的核心函数。

于 2011-01-21T17:44:38.133 回答