【问题标题】:Wcf Router - Duplex services- resubscriptionWcf 路由器 - 双工服务 - 重新订阅
【发布时间】:2013-10-02 08:27:14
【问题描述】:

我有一个双工 wcf 服务,它保存(在内存中)对其客户端的回调引用列表。 wcf 服务有订阅和取消订阅两种方法。

一个 wcf 服务器和多个客户端都可以正常工作。当我使用 Wcf 路由器服务引入两个具有负载平衡的 wcf 服务器时,问题就开始了。

例如,我有两个 wcf 服务器(wcf1 和 wcf2)和一个路由器服务器(r1)。当客户端调用“订阅”到路由器端点时,它会将该请求广播到 wcf1 和 wcf2 服务器。这样他们两个都持有对客户端的回调引用。当其中一个 wcf 服务器关闭时,问题就开始了。如果 wcf1 服务器出现故障,则所有订阅都将丢失。所以当它恢复活跃时,就没有可用的订阅来进行回调,也没有办法通知客户端重新订阅。

我尝试在客户端监听故障事件。这不会被触发,因为它连接到路由器端点。只有在路由器服务器关闭时才会触发该事件。

有没有人和我遇到过类似的问题?我做错了吗?

【问题讨论】:

    标签: wcf c#-4.0 duplex wcf-routing


    【解决方案1】:

    处理此问题的唯一方法是将回调列表保存在某种可共享的资源中,例如数据库、缓存甚至共享驱动器上的文件。这可以在启动时由您的服务的每个实例访问,因此在发生故障时会重新加载所有回调。

    抱歉,这可能不是您想要的。

    【讨论】:

    • 我假设回调引用不能被序列化并存储在一些持久性存储中。我会重新检查
    • 如果这是真的,那我想不出其他办法了。我认为 MS 没有正确设想人们将如何使用 WCF 双工 - 在我看来 WCF 双工并不真正适合目的。
    • 我刚刚检查过,当我们对回调进行序列化和反序列化时,它不再是有效对象或持有对客户端的实际引用。我同意,wcf 双工产生的问题比解决的问题多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2011-01-23
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多