抽象连接错误

时间:2013-02-08 21:27:33

标签: c# connection abstraction

我有一个名为IConnection的接口

public interface IConnection
{

    bool IsConnected { get; }
    Task ConnectAsync(IEndPoint remoteEP);
    Task<int> SendAsync(byte[] data, int offset, int size);
    Task<int> ReceiveAsync(byte[] buffer, int offset, int size);
    void Disconnect();
    void Close();

    event EventHandler<DisconnectedEventArgs> Disconnected;

}

它由两种不同类型的连接实现 - 基于Socket的连接类和基于HTTP的连接类。我还希望将来可以选择添加其他连接类型。

在我的主ChatClient类中启动连接时,我将检查用户的配置,然后根据用户的喜好,创建一个SocketConnection或一个HTTPConnection。从那时起,我只使用它的IConnection接口来引用连接。

IConnection类具有Disconnected事件,该事件在用户调用Disconnect时发生,或者发生某些意外连接错误时引发。 DisconnectedEventArgs将包含有关导致断开连接的原因的信息。

我想知道的是,我如何抽象出不同类型的错误?

套接字可能会遇到许多不同的错误情况,导致它断开连接,包括但不限于 -

  • 远程端启动了正常断开连接(即.. Read返回0)
  • 读/写抛出带有标志SocketError.ConnectionAborted
  • 的SocketException
  • 读/写抛出带有标志SocketError.NetworkReset
  • 的SocketException

http连接也可能遇到许多不同的错误情况,例如 -

  • 无法轮询远程服务器 - 例如..主机突然消失
  • HTTP身份验证凭据被拒绝

如何将套接字的所有可能错误和http连接的所有可能错误合并为一种类型?

我是否使用包含所有可能错误的值的枚举?

我是否有简单的错误代码和错误描述?

我应该处理多少个套接字错误条件?只有我期望遇到的?或者所有人?

1 个答案:

答案 0 :(得分:1)

为什么DisconnectEventArgs不包含public Exception Error { get; set; }。正常调用Error时,Disconnect为空,否则包含Socket或Http异常。