Повторное выбрасывание исключения из сокета драйвера устройства

Обновить

December 2018

Просмотры

93 раз

3

У меня есть драйвер для удаленного устройства, и драйвер взаимодействует с устройством через гнездо. Драйвер имеет свойства, которые клиенты могут использовать, чтобы получить информацию об устройстве. Каждое свойство использует частный метод чтения / записи водителя, чтобы отправить запрос на устройство и ждать ответа.

Я пытаюсь определить наилучший способ обработки исключений сокета. В частности, когда клиент использует одно из свойств, чтобы получить информацию об устройстве, я должен повторно выдать исключения, возникающие в методе чтения / записи, в противном случае, клиент получит значение по умолчанию, не зная, что-то пошло не так.

Существуют ли какие-либо шаблоны проектирования или общие подходы к этому типу вопроса? Это кажется немного утомительно для обработки исключений в любое время клиент использует свойства драйвера. Но опять же, единственная работа вокруг, я вижу, чтобы иметь логическое HasError свойства на водителе. Это действительно просто косвенный обходной путь фактически бросает исключение и имея клиент поймать его.

1 ответы

0

Вы должны интерпретировать исключение сокетов и повторно выдать что-то более информативное для клиента: они не хотят, чтобы думать о проблемах сокетов. Если ваши исключения не отображаются на любых существующие исключения очень хорошо, создать свой собственный тип исключения и возвращать информативные сообщения, такие как «есть проблема с сетевым соединением», а затем что-то вроде «ошибки сокета».

например

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

Конечно, вы можете добавить некоторые детали из SocketException на ваше собственное сообщение для отладки.

Исключения по-прежнему определенно путь, но вы хотите, чтобы предоставить клиенту содержательные сообщения в их контексте, а не ваша. В конце концов, когда вы используете классы сокетов вы получаете SocketExceptions: не NDIS исключения или любой другой, который не будет означать ничего для вас.

Связанные вопросы