我们有一系列Web服务,它们位于从Web应用程序,Web站点和其他服务访问的不同环境(dev/qa/staging/production)中。还有几个不同的服务领域。因此对于生产,我们在四个不同的盒子上提供服务。在不同环境中使用Web服务
我们通过检查global.asax中的主机名并根据该主机名设置一些应用程序范围设置来征服db连接字符串问题。在源代码控制中有一个config.xml,它列出了各种主机名以及他们应该得到的设置。
但是,我们还没有找到一个优雅的Web服务解决方案。到目前为止,我们所做的是为项目添加对所有环境的引用,并向使用这些服务的文件添加几个使用语句。当我们签的项目,我们取消对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.config.dev,web.config.qa等,并在global.asax中将应用程序启动时换出。我不认为这会起作用,因为在global.asax运行时编译已经完成,并且web.config更改不会有太大影响。
由于“最佳实践”包括使用Web服务进行数据访问,我希望这不是一个独特的问题,而且有人已经想出了一个解决方案。
或者我们正在讨论这个问题吗?
编辑: 这些是asmx网络服务。我可以找到web.config中没有引用的url。
为什么在不同的环境下,您的Web服务中有不同的命名空间?是不是在dev和qa和生产上部署了相同的二进制文件? – 2009-10-15 17:25:21
不同的名称空间是如何指定不同的URL。 Dev,QA和Production通常有不同的二进制文件,因为任何变更都必须在Dev中开发,然后转移到QA进行测试,最后推送到Production。所有三个二进制文件可能不同。 – 2009-10-15 18:12:16
名称空间不应该改变。这是一个重大错误。 – 2009-10-19 14:25:10