免责声明,我是我公司的技术支持和系统管理员,而不是开发人员。我不是在详细说明,只是想知道我想要实现的是否可能。
我们拥有数百个内部经典ASP遗留电子商务软件应用程序实例,由于客户和我们自己的无数定制,版本管理是噩梦般的,自定义代码无法管理,我们放弃发布新功能由于无法跟踪谁需要哪些补丁,所以大规模部署错误修复。
Parellel对这个问题我正在制作管理脚本,以便更好地自动化。
然而,我真正想做的是使用最小的努力,将应用程序代码(而不是数据库)移植到单个代码库。我有问题:
根据被调用的主机头,ASP能否相对有效地处理连接到不同的数据库?我计划对例程进行一些基本扩展,获得hostheader 在metadb中查找db凭据,相应地设置应用程序连接字符串逻辑。
应用程序从数据库向Web服务器写入一些文件用于缓存,我想通过将其写入/masterapp/customer1/specificfile.htm然后更改在代码中引用/specificfile.htm更像/ masterapp / 商店名称 /specificfile.htm。显然,编写specificfile.htm的例程会相应地写入新位置。这看起来合理吗?
其他网络服务器绑定的商店特定内容,如图像和csv文件,我需要在没有理想的URL更改的情况下继续工作,ASP可以使用逻辑将/images/example.jpg的获取请求重定向到/ masterapp / 商店名称 /images/example.jpg或/shopname/images/example.jpg再次依赖主机标题?或者可以通过isapirewrite完成? (我们已经使用过)
我认为这些是最大的挑战。我不需要有关如何实现这些内容的完整项目计划,我只想知道是否可能。如果答案是'是',我应该能够在开发时出售我的老板,因为节省了支持时间,我们的内部开发人员可能希望能够解决这个问题。
答案 0 :(得分:0)
这个应该是可能的,并且我已经从一开始就以这种方式开发的代码实现了类似的结果。当你正在改进它时,它会变得更加艰难,但这与你的实际问题是分开的。
回答你的实际观点:
据推测,您的数据库连接字符串已经存在于应用程序变量或设置文件中?如果是这样,您只需要在global.asa Session_OnStart中使用一些逻辑来读取主机头并选择适当的DB字符串。这可以是硬编码的,或者你可以有一个“控制”DB来存储站点,它们的DB字符串文件路径等,并将细节拉入会话对象。
这与上述内容相关,从数据库中提取缓存存储位置,或者每个站点都有一个“目录名称友好”基本名称,因此您可以"/masterapp/" & Session("strSiteBaseName") & "/cache/somefile.htm"
如果您使用的是IIS7,则可以使用URL重写模块来处理此问题,如果您使用的是IIS6,则可以使用第三方工具为您进行URL重写。我再次这样做,所以可以保证它的工作。如果你想变得非常聪明,你可以让你的主应用程序为你创建重写文件并“触摸”web.config以将它们加载到IIS中。
你将拥有主机标题的一个“问题”是记得处理www和no-www记录!
您提到了每个网站的自定义代码,我还没有在生产中完成此操作,但已经在应用程序外进行了测试,您可以在已经声明后重写功能。您不能包含变量名称,但是您可以加载文本文件并执行它,因此有一种方法可以使用自定义函数,或者更改特定于您的总体应用程序的单个实例的核心函数。