C# 如何为开发/阶段/生产维护单独的Web服务
我们希望为不同的部署步骤维护3个Web服务,但是我们如何在应用程序中定义要使用的服务呢?我们是否只维护3个web引用并以某种方式定义它们的使用?不维护代码中的差异,而是通过一个配置文件。这样,它们都运行相同的代码,只是配置值不同(即要绑定的端口、要应答的主机名等)。我的建议是将这些信息保存在应用程序的配置文件中。更好的做法是在构建过程中将给定环境的适当值注入到配置中,假设构建过程具有某种宏替换功能。这样,您就可以为给定的环境创建目标生成,而不必每次为不同的环境生成时都更改配置。将服务地址和端口放入应用程序的配置中。在服务的配置中执行相同的操作可能是一个好主意,至少对于端口是这样,这样您的开发服务就可以侦听正确的端口。这样,您就不必修改代码来更改正在使用的服务器/端口C# 如何为开发/阶段/生产维护单独的Web服务,c#,.net,asp.net,web-services,C#,.net,Asp.net,Web Services,我们希望为不同的部署步骤维护3个Web服务,但是我们如何在应用程序中定义要使用的服务呢?我们是否只维护3个web引用并以某种方式定义它们的使用?不维护代码中的差异,而是通过一个配置文件。这样,它们都运行相同的代码,只是配置值不同(即要绑定的端口、要应答的主机名等)。我的建议是将这些信息保存在应用程序的配置文件中。更好的做法是在构建过程中将给定环境的适当值注入到配置中,假设构建过程具有某种宏替换功能。这样,您就可以为给定的环境创建目标生成,而不必每次为不同的环境生成时都更改配置。将服务地址和端口放
使用配置而不是代码在开发、阶段和生产之间切换对于测试非常有价值。当您部署到生产环境时,您希望确保您部署的代码与测试的代码完全相同,而不是略有不同。在开发和生产之间,您只需更改配置。正如其他人所提到的,您需要将此信息存储在配置文件中。事实上,我建议为每个环境使用不同的配置文件。这将解决每个环境都有多个设置的不可避免问题,例如,您可能对web服务URL和web服务端口有单独的设置,或者有一些额外的设置来处理https/安全性 综上所述,请确保解决以下潜在问题: 如果web服务对应用程序执行任何特别重要的操作,您可能希望将应用程序与每个环境中的web服务结合起来(即,在每个环境中都有一个应用程序版本)。当然,以这种方式对接口进行任何更改都会更容易
确保某人清楚地知道您正在与哪个版本的web服务交谈。所有可以从开发到测试再到产品更改的内容都必须是可配置的。如果您有能力构建在产品安装期间更新这些可变内容的流程,那么就这样做。(将自定义项烘焙到构建中似乎是一个低劣的想法——对于同一版本的源代码,您最终会得到一堆不同的不兼容构建)FYI,昨天这里讨论了这一点:
不使用web引用,而是从web服务WSDL的使用中生成代理类。生成的类将有一个Url属性,该属性可以根据部署步骤(开发、qa、生产等)进行设置。当我上一次使用web服务器处理项目时,我们处理了以下问题:
将构建并部署到一个测试环境,该环境部分由团队共享,部分特定于开发人员。msbuild/t:deploy
的默认值是$(服务器)
$(用户名)
msbuild/t:deploy/p:server=test将部署到非开发人员可以查看的共享测试环境
将部署到live server。我想我添加了一个额外的握手,就像一个错误,除非你有msbuild/t:deploy/p:server=live
,只是为了确保你没有意外地这么做/p:secret=foo