【发布时间】:2018-09-04 12:44:34
【问题描述】:
我有一个使用一些 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 关闭时被执行。
我的另一个想法是实现一些全局异常处理程序并在那里捕获这些异常?你怎么看?
【问题讨论】:
-
我看到了,但我没有看到任何可以适应我的场景的东西。我需要捕捉那些异常;p
-
你看示例c#代码了吗?
-
是的,它是关于处理服务中的故障。我的服务没有任何问题。我的问题是当服务关闭通信套接字时出现异常
-
服务器从不启动连接。因此,当客户端关闭时,客户端需要重新连接。 websocket 包含一个监听器(参见:docs.microsoft.com/en-us/dotnet/api/…),只要监听器在工作,它就会接受一个新的连接。您遇到问题的唯一情况是第一个连接是否完全关闭。您只能有一个具有相同源 IP、目标 IP 和端口号的连接。因此,当第一个连接关闭时,您无法使用相同的 IP 和端口号重新连接。