【发布时间】:2010-09-11 10:52:31
【问题描述】:
我们希望为部署的不同步骤维护 3 个 Web 服务,但是我们如何在应用程序中定义要使用的服务呢?我们是否只维护 3 个网络引用并 ifdef 以某种方式使用它们?
【问题讨论】:
标签: c# .net asp.net web-services
我们希望为部署的不同步骤维护 3 个 Web 服务,但是我们如何在应用程序中定义要使用的服务呢?我们是否只维护 3 个网络引用并 ifdef 以某种方式使用它们?
【问题讨论】:
标签: c# .net asp.net web-services
当我上次使用 Web 服务器进行项目时,我们处理此问题如下:
msbuild /t:deploy 将构建和部署到一个测试环境,该环境部分由团队共享,部分是特定于开发人员的。 $(SERVER) 的默认值为 $(USERNAME)。msbuild /t:deploy /p:server=test 将部署到共享测试环境,非开发人员可以查看。msbuild /t:deploy /p:server=live 将部署到实时服务器。我想我添加了一个额外的握手,就像一个错误,除非你有 /p:secret=foo,只是为了确保你没有意外地这样做。【讨论】:
不使用 Web 引用,而是使用 wsdl.exe 从 Web 服务 WSDL 生成代理类。生成的类将具有一个 Url 属性,可以根据部署步骤(开发、质量保证、生产等)进行设置。
【讨论】:
仅供参考,这是昨天在这里解决的:
How do you maintain java webapps in different staging environments?
【讨论】:
所有可以从 dev 到 test 到 prod 的东西都必须是可配置的。如果您有能力在产品安装过程中构建更新这些变量的过程,那就去做吧。 (将自定义内容烘焙到构建中似乎是一个低劣的想法——您最终会为同一版本的源代码获得一堆不同的不兼容构建)
【讨论】:
正如其他人所提到的,您需要将此信息存储在配置文件中。事实上,我建议为每个环境使用不同的配置文件。这将解决每个环境有多个设置的不可避免的问题,例如。您可能对 Web 服务 URL 和 Web 服务端口有单独的设置,或者有一些额外的设置来处理 https/security。
话虽如此,请确保您解决了这些潜在问题:
如果 Web 服务对应用程序做任何特别重要的事情,您可能希望将应用程序与每个环境中的 Web 服务结合起来(即在每个环境中都有一个应用程序版本)。当然,以这种方式对界面进行任何更改都会更容易。
确保别人清楚您正在使用的网络服务版本。
【讨论】:
不要维护代码中的差异,而是通过配置文件。这样,它们都运行相同的代码,只是具有不同的配置值(即要绑定的端口、要响应的主机名等)
【讨论】:
将服务地址和端口放入应用程序的配置中。在服务的配置中做同样的事情可能是个好主意,至少对于端口,这样您的开发服务就可以在正确的端口上进行侦听。这样您就不必为了更改您要访问的服务器/端口而修改代码。
使用配置而不是代码在开发、阶段和生产之间切换对于测试非常有价值。当您部署到生产环境时,您希望确保部署的代码与测试过的完全相同,而不是稍有不同。您应该在开发和生产之间进行更改的只是配置。
【讨论】:
我的建议是将此信息保存在应用程序的配置文件中。更好的是在构建过程中将给定环境的适当值注入到配置中,假设您的构建过程具有某种宏替换功能。通过这种方式,您可以为给定的环境创建有针对性的构建,而不必在每次为不同的环境进行构建时都更改配置。
【讨论】: