我有一个消耗一些WCF WebSocket服务的应用程序。现在,如果主机关闭连接,我会得到以下例外:
现在我想在我的客户端应用程序中处理这些异常并尝试重新连接/通知用户等。但是如何捕获这些异常呢?
也许连接到渠道故障事件。我试过这个:
context = new InstanceContext(this);
var endpointAddress = new EndpointAddress(ServerFullAddress);
context.Faulted += Channel_Faulted;
client = new ServiceName(context, "NetHttpBinding_ServiceName", endpointAddress);
但ChannelFaulted方法永远不会被执行。如何正确地连接到这个事件,这个方法将在websocket关闭时执行。
我的另一个想法是实现一些全局异常处理程序并在那里捕获那些异常?你怎么看?
如果您控制服务,尝试发送Faults而不是Exception,这可以通过几种方法完成,
但我怀疑它没有触及Faulted事件的原因是,你的ChannelFactory不是故障的,而是clientChannel,
IClientChannel channel = (IClientChannel) Factory.CreateChannel();
,您可以检查通道对象的状态并使用上述方法重新创建它,通常,OpenedState
状态是您在通道对象中寻找的,关闭,关闭等将意味着通道未打开,或者它已被中止或出现故障。