0

语境

我们使用 .NET Stack 开发了端到端的应用程序。所以,假设我们正在管理这样的事情:

WPF 客户端 <=> Web 服务:

  1. 开发)纯引用(直接调用VS内部的WCF Service项目,不部署在IIS中)
  2. 生产)远程Web服务【IIS@远程服务器,需要VPN连接】

网络服务 <=> 数据库:

  1. 开发)SQL Server Express本地DB [@开发机器]
  2. 生产)SQL Server DB [@生产服务器,同WS]

请注意,我已经实现了“手动方式,正确方式”(http://www.code-magazine.com/Article.aspx?quickid=0809101)。因此,单独的合同/客户代理等等......

问题

我怎样才能以一种优雅的方式获得如前所述的设置?我的意思是,Web 服务 <=> 数据库很简单,因为我可以使用 web.config 转换来在调试和发布之间切换连接字符串。但是,如何自动将“连接”从客户端应用程序切换到 Web 服务?

在生产中,我使用了对代理的引用,并在 app.config 文件中描述了一个端点。我想在开发中我只需要一个对 Web 服务本身的简单引用。[我应该在调试/发布配置之间添加/删除引用吗?如果是,如何以编程方式实现?...我完全迷路了]。

谢谢你们的时间!;)

编辑:

正如@AlexanderBalte 建议的那样,开发行为只是对方法的直接调用。我在主开发机器上没有应用服务器。

4

2 回答 2

1

就像prthrokz一样,评论说,我们只是切换端点。使用条件编译符号尽可能简单(但并不简单):

    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
于 2013-01-09T20:25:49.200 回答
0

据我了解,开发行为只是直接调用方法,而生产行为是通过生成的代理与 Web 服务交互。

分别地,在开发和生产中,您使用不同的类,但使用相似的方法集。

也许我们应该创建另一个代理接口,其中包含 Web 服务所具有的精确方法集。此接口将有两种实现:一种是代理直接方法调用,另一种是 Web 服务方法调用。

此外,您将需要编写一个Factory类,该类将根据 app.config 中的某些配置为您提供代理接口的实现。

于 2013-01-10T08:46:19.023 回答