2009-10-15 15 views
0

我们有一系列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。

+0

为什么在不同的环境下,您的Web服务中有不同的命名空间?是不是在dev和qa和生产上部署了相同的二进制文件? – 2009-10-15 17:25:21

+0

不同的名称空间是如何指定不同的URL。 Dev,QA和Production通常有不同的二进制文件,因为任何变更都必须在Dev中开发,然后转移到QA进行测试,最后推送到Production。所有三个二进制文件可能不同。 – 2009-10-15 18:12:16

+0

名称空间不应该改变。这是一个重大错误。 – 2009-10-19 14:25:10

回答

1

制作一个参考并使用配置根据需要切换目标网址。没有理由有独立的代理。

+1

这听起来像个好主意。呃...我该怎么做? – 2009-10-15 18:13:21

+0

究竟如何取决于您正在使用哪种代理(ASMX vs WCF)。无论哪种情况,在创建代理时都会生成应用程序配置中的一些内容。根据需要调整网址。您可能必须将代理的动态属性设置为true并重新生成。如果你想这样做,或者有自己的配置基础设施,你通常也可以用代码提供配置信息。 – 2009-10-15 18:43:25

相关问题