我有一个远程设备的驱动程序,驱动程序通过套接字与设备通信。驱动程序具有客户端可用于获取有关设备的信息的属性。每个属性都使用驱动程序的私有读/写方法向设备发送查询并等待响应。
我正在尝试确定处理套接字异常的最佳方法。具体来说,当客户端使用其中一个属性来获取有关设备的信息时,我必须重新抛出读/写方法中发生的异常,否则,客户端将收到默认值,而不知道出现了什么问题。
此类问题是否有任何设计模式或常用方法?在客户端使用驱动程序属性时,处理异常似乎有点乏味。但话说回来,我看到的唯一工作就是在驱动程序上有一个布尔的HasError属性。这实际上只是实际抛出异常并让客户端捕获它的间接解决方法。
答案 0 :(得分:0)
您应该解释套接字异常并为客户端重新提供更多信息:他们不想考虑套接字问题。如果您的异常没有很好地映射到任何现有异常,请创建您自己的异常类型并返回信息性消息,例如“网络连接存在问题”,而不是“套接字读取错误”。
e.g。
try {
tcpClient = new TcpClient(address.ToString(), port);
} catch (SocketException SE) {
throw new MyDriverException("Failed to connect to remote device");
}
当然,您可以将SocketException中的一些细节添加到您自己的消息中以进行调试。
异常仍然是可行的方法,但您希望在其上下文中为您的客户提供有意义的消息,而不是您的。毕竟,当您使用套接字类时,您将获得SocketExceptions:不是NDIS异常或其他任何东西,这对您没有任何意义。