1

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

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

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

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

进一步更改此行不会产生任何影响,并且客户端首先连接的框会继续接收方法调用。此外,将服务实例管理从会话更改为每次调用也没有任何区别。

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

问候,F。

4

2 回答 2

3

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

于 2011-06-19T20:53:19.137 回答
0

创建并打开客户端后,我 99% 确定(无需再次检查为 100%)您无法更改其中的任何 ABC。你将不得不为每台服务器做代理。

于 2011-06-19T20:56:07.590 回答