我有在后台运行的C#应用程序。此应用程序的执行可能需要1到10分钟,并且它正在与从一开始直到执行结束时调用多个Web方法的WCF服务进行通信。
为了避免创建/关闭太多代理对象,我在进程的持续时间内有一个代理对象。我有几个配置了IIS的服务器盒,其中有一个WCF服务的副本,我希望使用这两个盒来分散负载。由于缺乏昂贵的负载平衡解决方案,我想在运行时更改代理的端点地址,以便每次方法调用与不同的服务器盒进行通信。
我在第一次方法调用之前尝试过这个:
client.Endpoint.Address = new EndpointAddress("http://box1.wcfserviceaddress.com/MyService.svc");
在线下进一步更改将不会产生任何影响,客户端连接到的第一个框将继续接收方法调用。此外,将服务实例管理从会话更改为每次调用没有任何区别。
可以这样做还是我需要为每个方法调用创建一个客户端?
此致 F。
答案 0 :(得分:3)
代理派生自实现ClientBase
的{{1}}。从ICommunicationObject
或实现CommunicationObject
派生的所有类共享相同的行为 - 它们只能在ICommunicationObject
状态下配置。一旦通信对象从Created
状态移动,配置就无法更改,并且因为第一次使用代理后它的设置地址(它将状态更改为Created
)没有任何效果。使用新地址获取代理的唯一方法是创建一个新地址。
答案 1 :(得分:0)
一旦创建并打开了一个客户端,我99%肯定(没有仔细检查为100%)你不能改变它的任何ABC。你将不得不为每台服务器完成代理。