【发布时间】: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