在运行时重新分配客户端的端点

时间:2011-06-19 20:43:19

标签: wcf endpoints

我有在后台运行的C#应用​​程序。此应用程序的执行可能需要1到10分钟,并且它正在与从一开始直到执行结束时调用多个Web方法的WCF服务进行通信。

为了避免创建/关闭太多代理对象,我在进程的持续时间内有一个代理对象。我有几个配置了IIS的服务器盒,其中有一个WCF服务的副本,我希望使用这两个盒来分散负载。由于缺乏昂贵的负载平衡解决方案,我想在运行时更改代理的端点地址,以便每次方法调用与不同的服务器盒进行通信。

我在第一次方法调用之前尝试过这个:

client.Endpoint.Address = new EndpointAddress("http://box1.wcfserviceaddress.com/MyService.svc");

在线下进一步更改将不会产生任何影响,客户端连接到的第一个框将继续接收方法调用。此外,将服务实例管理从会话更改为每次调用没有任何区别。

可以这样做还是我需要为每个方法调用创建一个客户端?

此致 F。

2 个答案:

答案 0 :(得分:3)

代理派生自实现ClientBase的{​​{1}}。从ICommunicationObject或实现CommunicationObject派生的所有类共享相同的行为 - 它们只能在ICommunicationObject状态下配置。一旦通信对象从Created状态移动,配置就无法更改,并且因为第一次使用代理后它的设置地址(它将状态更改为Created)没有任何效果。使用新地址获取代理的唯一方法是创建一个新地址。

答案 1 :(得分:0)

一旦创建并打开了一个客户端,我99%肯定(没有仔细检查为100%)你不能改变它的任何ABC。你将不得不为每台服务器完成代理。