我有一个使用某些WCF WebSocket服务的应用程序。现在,如果主机关闭连接,我会收到以下异常:
- System.Net.Sockets.SocketException
- System.Net.WebSockets.WebSocketException
- System.ServiceModel.CommunicationException
现在我想在我的客户端应用程序中处理这些异常,并尝试重新连接/通知用户等。 但是,究竟如何捕获这些异常呢?
也许连接到通道故障事件。 我试过这个:
context = new InstanceContext(this);
var endpointAddress = new EndpointAddress(ServerFullAddress);
context.Faulted += Channel_Faulted;
client = new ServiceName(context, "NetHttpBinding_ServiceName", endpointAddress);
但是 ChannelFaulted 方法永远不会被执行。如何正确挂接到此事件,此方法将在 websocket 关闭时执行。
我的另一个想法是实现一些全局异常处理程序并在那里捕获这些异常?你觉得怎么样?
如果您控制服务,请尝试发送错误而不是异常,这可以通过几种方法简单地完成,
但我怀疑它没有遇到故障事件的原因是,你的通道工厂不是出错的那个,而是客户端通道,
IClientChannel channel = (IClientChannel) Factory.CreateChannel();
,您可以使用上述方法检查通道对象的状态并重新创建它,通常,OpenedState
状态是您在通道对象中查找的状态,关闭、关闭等意味着通道未打开,或者已中止或出现故障。