2012-09-17 29 views
0

我需要基于在运行时评估某些条件来调用WCF服务1或服务WCF 2,。这两个服务都是类似的,但托管在不同的服务器上我们可以添加删除命名空间引用(usings)动态地在C#

我已经添加了两个服务引用,NS1和NS2指向不同的URL。当前的代码已经使用NS1。考虑到NS1的实施已经在很多地方完成了。什么是重构代码的最佳方式,动态选择哪个服务必须被调用?

+1

你的问题可能需要你如何调用服务方法的一些细节,但为什么不能你只需要在你的配置定义的两个不同的端点,然后使用基于您的具体情况适当的呢? –

+2

这些服务只是*相似*或*完全相同*? –

+0

NS2是NS1的备份还是负载均衡,还是他们执行不同的任务? – all2neat

回答

1

一般情况下,它被认为是不好的做法,直接对由svcutil.exe的产生的代理程序。

最好的办法是将其包装在一个类你自己的,并在每次需要服务时引用这个类。这也可以让你实现更高级的业务逻辑,如路由(在你的情况下)和其他交叉问题。例如:您现在可以从应用程序中抽象出您用于连接到服务的策略,即Service reference或ChannelFactory。您可以轻松地在不同的程序集之间共享服务,而不会出现歧义。

你在说你有很多直接写入NS1的代码。磨牙并包裹它。这是很多肮脏的工作,但风险很低。

说了上面,我想知道本身的要求,在服务调用自身另一个实例另一台服务器上(如果我得到你的权利)。这很奇怪,你想要解决什么问题?

+0

Vitaliy对不起,如果我听起来有点糊涂,服务不会调用iself的另一个实例..而是客户端必须在运行时决定哪个版本的服务必须被调用.. – Abhijeet

+0

我明白了。首先,我的回答是立场。无论如何, 从旧版本到新版本有什么变化? (也许我们应该谈论向后兼容性)。 – Vitaliy

相关问题