【发布时间】:2009-10-15 14:11:12
【问题描述】:
我们有一系列 Web 服务,它们存在于不同的环境(dev/qa/staging/production)中,可以从 Web 应用程序、网站和其他服务访问。还有几个不同的服务区。因此,对于生产,我们在四个不同的盒子上提供服务。
我们通过检查 global.asax 中的主机名并根据该主机名设置一些应用程序范围的设置来解决数据库连接字符串问题。源代码控制中有一个 config.xml,其中列出了各种主机名以及它们应该获得的设置。
但是,我们还没有找到适合 Web 服务的优雅解决方案。到目前为止,我们所做的是将所有环境的引用添加到项目中,并将几个 using 语句添加到使用服务的文件中。当我们签出项目时,我们取消注释我们所处环境的相应 using 语句。
看起来像这样:
// Development
// using com.tracking-services.dev
// using com.upload-services.dev
// QA
// using com.tracking-services.qa
// using com.upload-services.qa
// Production
// using com.tracking-services.www
// using com.upload-services.www
显然,随着我们越来越多地使用 Web 服务,这种技术将变得越来越繁重。
我考虑将命名空间放入 web.config.dev、web.config.qa 等,并在应用程序启动时将它们换出 global.asax。我认为这不会奏效,因为当 global.asax 运行时,编译已经完成并且 web.config 更改不会产生太大影响。
由于“最佳实践”包括使用网络服务进行数据访问,我希望这不是一个独特的问题,并且有人已经提出了解决方案。
还是说我们把整件事都搞错了?
编辑: 这些是 asmx Web 服务。我找不到 web.config 中引用的 url。
【问题讨论】:
-
为什么您的 Web 服务中针对不同的环境有不同的命名空间?开发、质量保证和生产环境中部署的二进制文件不是相同吗?
-
不同的命名空间是如何指定不同的url。 Dev、QA 和 Production 通常有不同的二进制文件,因为任何更改都必须在 Dev 中开发,然后转移到 QA 进行测试,最后推送到生产。所有三个二进制文件都可能不同。
-
命名空间不应改变。这是一个重大错误。
标签: asp.net web-services environment-variables