我们如何为开发/阶段/生产维护单独的Web服务
我们想为不同的部署步骤维护3个Web服务,但是如何在应用程序中定义要使用的服务呢?我们是否仅维护3个Web参考,并且ifdef以某种方式使用了它们?
解决方案
不要维护代码中的差异,而要通过配置文件。这样,他们都运行相同的代码,只是配置值不同(即要绑定的端口,要答复的主机名等)。
我的建议是将此信息保留在应用程序的配置文件中。假设构建过程具有某种宏替换功能,则最好在构建过程中将给定环境的适当值注入配置中。这样,我们可以为给定环境创建目标构建,而不必在每次针对不同环境进行构建时都更改配置。
将服务地址和端口放入应用程序的配置中。在服务的配置中至少对端口执行相同的操作可能是一个好主意,以便dev服务在正确的端口上侦听。这样,我们不必修改代码即可仅更改要命中的服务器/端口。
对于测试而言,使用config而非代码在开发,阶段和生产之间进行切换非常有价值。在部署到生产环境时,我们要确保部署的是经过测试的相同代码,没有什么不同。我们需要在开发人员和生产人员之间进行更改的只是配置。
正如其他人提到的那样,我们将需要将此信息存储在配置文件中。实际上,我建议为每个环境使用不同的配置文件。这将解决不可避免的问题,即为每个环境设置多个设置,例如我们可能对Web服务URL和Web服务端口有单独的设置,或者有一些额外的设置来处理https / security。
所有这些,请确保我们解决以下潜在问题:
如果Web服务对应用程序进行了特别重要的操作,则我们可能希望将该应用程序与每个环境中的Web服务结合(即,在每个环境中都有一个应用程序版本)。当然,以这种方式对接口进行的任何更改都更容易。
确保与我们交谈的Web服务版本对于某人来说是显而易见的。
从开发人员到测试人员到生产人员的所有更改都必须是可配置的。如果我们有能力构建在产品安装期间更新这些可变内容的过程,请执行此操作。 (将自定义项放入构建中似乎是一个卑鄙的主意-对于相同版本的源代码,我们最终会得到许多不同的不兼容的构建)
仅供参考,这是昨天在这里解决的:
如何在不同的登台环境中维护Java Web应用程序?
代替使用Web引用,而是使用wsdl.exe从Web服务WSDL生成代理类。生成的类将具有可根据部署步骤(开发,质量保证,生产等)设置的Url属性。
当我上一次使用Web服务器处理项目时,我们按以下方式处理此问题:
- " msbuild / t:deploy"将构建并部署到一个由团队部分共享,并且部分特定于开发的测试环境。 $(SERVER)的默认值为$(USERNAME)。
- msbuild / t:deploy / p:server = test将会部署到非开发人员可以查看的共享测试环境。
- msbuild / t:deploy / p:server = live将部署到实时服务器。我想我增加了一次额外的握手,就像一个错误,除非我们有
/ p:secret = foo
,只是为了确保我们不是偶然地这样做。