上下文
我们使用.NET Stack从端到端开发了应用程序。所以,假设我们正在管理这样的事情:
WPF客户端< =>网络服务:
网络服务< =>数据库:
请注意,我已经实现了“手动方式,正确方式”(http://www.code-magazine.com/Article.aspx?quickid=0809101)。因此,单独的合同/客户代理等等......
问题
我怎样才能以优雅的方式获得如前所述的设置?我的意思是,网络服务< =>数据库它是微不足道的,因为我可以使用web.config转换来切换调试和放大之间的连接字符串。发布。但是,如何自动将“连接”从客户端应用程序切换到Web服务?
在生产中,我使用对代理的引用,并描述app.config文件中的端点。我想在开发中我只需要对Web服务本身的简单引用。 [我应该在调试/发布配置之间添加/删除引用吗?如果是的话,如何以编程方式实现? ......我完全迷失了。
谢谢你们的时间! ;)
编辑:
正如@AlexanderBalte所说,开发行为只是方法的直接调用。我在主开发机器上没有应用服务器。
答案 0 :(得分:1)
就像评论prthrokz一样,我们只是切换端点。使用conditional compilation symbols尽可能简单(但不简单):
WCFServiceClient client = new WCFServiceClient();
#if DEBUG
client.Endpoint.Address = new EndpointAddress(new Uri("http://devSrv/WCFService.svc"));
client.Endpoint.Name = "Dev";
#else
client.Endpoint.Address = new EndpointAddress(new Uri("http://prodSrv/WCFService.svc"));
client.Endpoint.Name = "Prod";
#endif
答案 1 :(得分:0)
据我了解, 开发行为只是方法的直接调用,生产行为是通过生成的代理与Web服务的交互。
分别在开发和制作中,您正在使用不同的类,但使用一组相似的方法。
也许我们应该创建另一个代理接口,其中包含一组精确的方法,如Web服务。 这个接口将有两个实现:一个是代理直接方法调用,另一个是web服务方法调用。
此外,您需要编写一个Factory
类,它将根据app.config中的某些配置为您提供代理接口的实现。