【问题标题】:Reassign a client's endpoint at runtime在运行时重新分配客户端的端点
【发布时间】:2011-06-19 20:43:18
【问题描述】:

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

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

在第一个方法调用之前我已经尝试过了:

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

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

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

问候, F.

【问题讨论】:

    标签: wcf endpoints


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      一旦创建并打开了一个客户端,我 99% 确定(无需再次确认 100%)您不能更改它的任何 ABC。您将不得不为每台服务器完成代理。

      【讨论】:

        猜你喜欢
        • 2011-03-07
        • 1970-01-01
        • 2012-02-07
        • 2019-07-11
        • 2012-01-09
        • 1970-01-01
        • 2020-06-06
        • 2014-05-12
        • 2011-11-06
        相关资源
        最近更新 更多