【问题标题】:Problem making WCF proxies react to service shutdown使 WCF 代理对服务关闭做出反应的问题
【发布时间】:2010-12-07 04:12:51
【问题描述】:

我有一个自定义(通用)代理类,用于连接到我的 WCF 服务。我想为此类提供的功能之一是能够从服务故障(即故障通信通道)和关闭中“恢复”。为此,我获得了对服务通道的引用并订阅了 ICommunicationObject.Closed 和 ICommunicationObject.Faulted 事件。当这些事件发生时,我会启动一个“恢复”过程,基本上每隔几秒钟就会尝试重新建立与服务的连接。假设是,如果服务不可用,无论出于何种原因,它很快就会再次可用,并且客户端应用程序可以恢复原来的状态。

我有两个服务。服务 A 需要回调合约,而服务 B 不需要。服务 A 使用双工通道,服务 B 不使用。两者都需要会话。服务 A 隐式创建会话;服务 B 定义了 IsInitiating 和 IsTerminating 操作。这是我看到的(有点令人困惑的)行为:

服务A

  • 正常关闭 -> 引发了故障事件并且可以由代理处理,但不能由关闭事件处理。
  • “硬”关机 -> 同上。

服务 B

  • 正常关闭 - 未引发任何事件。
  • “硬”关机 - 未引发任何事件。

请注意,这两个服务使用相同的代理类。唯一的区别在于它们是如何初始化的。代理 A 使用双工通道工厂,因此必须创建一个实例上下文,将实现服务 A 的回调协定的实例传递给该实例上下文。代理 B 仅使用“常规”通道工厂。

有什么想法吗?

非常感谢, J.

【问题讨论】:

  • 您好,遇到了类似的问题。你最终在这方面取得了成功吗?

标签: c# wcf events wcf-client


【解决方案1】:

ICommunicationObject.State 属性对您有帮助吗?应返回打开、关闭、故障,以及打开和关闭的过渡状态。也许您可以在调用任何方法之前在您的代理中检查这一点

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 2019-07-26
    • 2012-02-04
    • 2016-10-22
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多