首先,我确实关注了google和stackoverflow,但似乎没有什么能满足我的愿望。
那就是说。我正在使用我从以前的开发人员继承的MVC应用程序(它也可能是一个Web窗体应用程序)。当前的服务引用指向生产服务器,我想简单地指向本地开发服务器。理想情况下,我不想编辑web.config文件,以便从dev更改为prod(特别是如果它适用于多个地方等)。
因此,可能存在一个“最佳实践”,用于添加额外的Web引用,并且能够通过非常少的配置更改快速“交换和测试”对PROD引用的DEV引用。
也许是设计模式或appconfig设置来促进这个过程?将它与服务引用的构造函数注入松散耦合当然是理想的。关于如何最好地实现这个的任何想法?
答案 0 :(得分:4)
另一种选择是为指向不同地址的同一服务添加多个端点配置。然后,当您创建服务客户端的新实例时,您将传递端点配置的名称。
ContractServiceContractClient client =
new ContractServiceContractClient("DEV_Endpoint");
或
ContractServiceContractClient client =
new ContractServiceContractClient("PROD_Endpoint");
并在您的ServiceReference配置
中<endpoint address="http://localhost:7821/ContractService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ContractService"
contract="ContractServiceReference.IContractService"
name="DEV_Endpoint" />
或
<endpoint address="http://service.apps.com/ContractService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ContractService"
contract="ContractServiceReference.IContractService"
name="PROD_Endpoint" />
然后,如果您只是创建一个全局静态字符串或在app.config中添加一些包含您要使用的端点配置名称的内容,那么您只需在该位置更改它,它将在应用
这里唯一的问题是,如果您为同一个合同设置了多个端点配置,则无法在不传递要使用的端点配置的情况下创建服务客户端实例。
答案 1 :(得分:0)
我通常做的是在数据库中进行所有设置,并且每个环境都有不同的数据库连接字符串(机器不同)。
在app / web.config中我们只需更改1个键,指定我们指向的环境,然后其他所有内容都来自数据库中的设置表,其中包含每个环境的不同值。对于服务引用,签入的代码始终只指向localhost,在运行时,url是从db中检索的设置中分配的。