2011-09-06 26 views
3

我有一個遠程設備的驅動程序,並且驅動程序通過套接字與設備進行通信。驅動程序具有客戶可用來獲取設備信息的屬性。每個屬性使用驅動程序的私有讀/寫方法向設備發送查詢並等待響應。從設備驅動程序返回的套接字異常

我想確定處理套接字異常的最佳方法。特別是,當客戶使用其中一個屬性來獲取有關設備的信息時,我必須重新拋出讀/寫方法中發生的異常,否則客戶會收到一個默認值,而不知道出了什麼問題。

這種類型的問題是否有任何設計模式或常見方法?客戶端使用驅動程序屬性時,處理異常似乎有點繁瑣。但是再次,我看到的唯一工作是在驅動程序上有一個布爾型的HasError屬性。這實際上只是一個間接的解決方法,以便實際拋出異常並讓客戶端抓住它。

回答

0

您應該解釋套接字異常並重新爲客戶端提供更多信息:他們不想考慮套接字問題。如果您的異常不能很好地映射到任何現有異常,請創建您自己的異常類型並返回信息性消息,例如「網絡連接有問題」,而不是像「套接字讀取錯誤」。

例如

try { 
    tcpClient = new TcpClient(address.ToString(), port); 
} catch (SocketException SE) { 
    throw new MyDriverException("Failed to connect to remote device"); 
} 

您當然可以從SocketException中添加一些細節到您自己的消息中以進行調試。

異常仍然是最佳選擇,但您希望在您的上下文中爲您的客戶提供有意義的消息,而不是您的。畢竟,當你使用套接字類的時候,你會得到SocketExceptions:不是NDIS的異常或者什麼,這對你來說什麼都沒有。