【问题标题】:TChannel state change events?TChannel 状态改变事件?
【发布时间】:2014-04-23 15:50:04
【问题描述】:

希望是一个简单的 WCF 初学者问题..

我有一个 WCF 通道工厂,返回一个服务代理 TChannel

// setup connection to server
var endpointAddress = new EndpointAddress(GetAppSetting("Endpoint"));
var tcpBinding = new NetTcpBinding();
channelFactory = new DuplexChannelFactory<IExcelServer>(this, tcpBinding, endpointAddress);
server = channelFactory.CreateChannel();

我想知道此服务代理何时更改状态(故障、关闭等)。我可以在 ChannelFactory 本身上看到事件,但是我不确定这与通道本身是否相同,即使在这里停止服务器进程也不会导致状态转换。

这是一个 CallbackContract 服务,在几乎所有交互中,服务器都在向客户端发送数据。因此,当我从客户端进行服务器调用时,我不能简单地依赖于捕获故障。

我应该从客户端向服务器发送心跳来触发状态更改吗?

【问题讨论】:

    标签: c# .net wcf channelfactory


    【解决方案1】:

    您从CreateChannel 返回的实例实现了TChannel,还实现了IClientChannel,它具有ClosedClosingOpened 等状态更改事件:

    server = channelFactory.CreateChannel();
    ((IClientChannel)server).Faulted += FaultedHandler;
    

    P.S:正如您所指出的,通道和通道工厂的状态是相关的,但并不相同。如果 Channel 出现故障,并不一定意味着 ChannelFactory 出现故障。

    【讨论】:

    • 完美运行,谢谢。我仍然收到来自 VS 的可疑强制转换警告 - 我想将 IClientChannel 添加到类声明中是不切实际的.. 是否有我应该扩展的抽象类?
    • @MarkNuttall-Smith 在这种情况下,您比 VS 了解更多。该实例将始终是 IClientChannel 但您可以通过检查使 VS 平静下来:var clientChannel = server as IClientChannel; if (clientChannel != null) { clientChannel.Faulted += FaultedHandler; }
    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多