реагируя на потерю связи - PullRequest
2 голосов
/ 04 февраля 2011

Предположим, у меня есть клиентское приложение .NET, которое подключается к службе WCF, или, возможно, очередь сообщений. Во время обычного выполнения программы возможно, что могут быть потери соединения или, возможно, пользователь был вынужден выйти из системы администратором, или администратор отправляет сообщение приложению для изменения и входа в систему на другой сервер WCF (например, некоторые форма ручной балансировки нагрузки).

Клиентское приложение узнает об этом только тогда, когда один из многих низкоуровневых методов связывается с вызовом WCF, и он завершается неудачей.

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

Как можно это сделать? Проблема, которую я вижу, состоит в том, что код, который первым обнаруживает наличие проблемы, находится на самом низком уровне (т. Е. Может быть в результате нажатия кнопки в диалоговом окне, расположенном поверх основных окон). Вроде как программа должна быть наизнанку, чтобы справиться с ней интуитивно. Поэтому я предполагаю, что есть какие-то шаблоны или структуры, которые помогают с этим?

Ответы [ 3 ]

3 голосов
/ 04 февраля 2011

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

2 голосов
/ 04 февраля 2011

Я считаю, что то, что вы ищете, называется "обработкой исключений".Исключением является способ добраться снизу вверх.

0 голосов
/ 04 февраля 2011

Одно из возможных решений, которое вы можете применить, заключается в том, что вы можете вызвать какой-нибудь нетранзакционный метод, который будет возвращать минимальный результат через фиксированный интервал. Или, если вы можете получить базовый объект сокета экземпляра wcf клиента; накладные расходы на проверку не так велики. Хотя у объектов сокетов, вероятно, нет какого-либо события, связанного с отключением; Вы можете проверить, только если вы пытаетесь связаться с другим концом, но я могу ошибаться по этому поводу.

...