C# 如何为开发/阶段/生产维护单独的Web服务

C# 如何为开发/阶段/生产维护单独的Web服务,c#,.net,asp.net,web-services,C#,.net,Asp.net,Web Services,我们希望为不同的部署步骤维护3个Web服务,但是我们如何在应用程序中定义要使用的服务呢?我们是否只维护3个web引用并以某种方式定义它们的使用?不维护代码中的差异,而是通过一个配置文件。这样,它们都运行相同的代码,只是配置值不同(即要绑定的端口、要应答的主机名等)。我的建议是将这些信息保存在应用程序的配置文件中。更好的做法是在构建过程中将给定环境的适当值注入到配置中,假设构建过程具有某种宏替换功能。这样,您就可以为给定的环境创建目标生成,而不必每次为不同的环境生成时都更改配置。将服务地址和端口放

我们希望为不同的部署步骤维护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将部署到非开发人员可以查看的共享测试环境
  • msbuild/t:deploy/p:server=live
    将部署到live server。我想我添加了一个额外的握手,就像一个错误,除非你有
    /p:secret=foo
    ,只是为了确保你没有意外地这么做

或在其他主机上运行。sys-dev.company.com sys-test.company.com etcI我很确定java和.net处理Web服务配置的方式不同,但仍然有一些好的信息。