Сообщение WCF и переподключение от 03.03.2015 8:26
Изменено 03.03.2015 8:28 Слава
Здравствуйте.
Есть десктопный клиент и сервер WCF на C#, .NET4.5, TCP-соединение.
Клиент при подключении к серверу логинится, указывает номер рабочего места, имя пользователя, пароль, подписывается на события и так далее. Сейчас в случае остановки сервера клиент попросту потеряет соединение, и не подключится до тех пор, пока пользователь руками не перезапустит клиентскую программу.
Я хочу сделать так, чтобы клиент сам подключался к серверу, после того, как соединение один раз было успешно установлено. Как наилучшим образом это реализовать?
Есть еще один клиент, который переподключается сам, но там я это сделал довольно-таки сложным способом — создал класс, методы которого внутри себя используют несколько вызовов к сервису, и на каждый публичный метод есть внутренний метод-исполнитель
Выглядит это так
Как это работает — клиентский код что-то хочет сделать, вызывает публичный метод и за ожидаемое время гарантированно получает либо отказ, либо результат. В случае обрыва соединения из за сбоя сети, сервера или еще чего-то, будет запущен поток, пытающийся восстановить соединение, при этом все вызовы от клиентского кода в это время будут завершаться с отказом.
Проблема в том, что даже для использования в моем коде вся эта конструкция какая-то излишне громоздкая, трудоемкая. В рабочем же месте, для которого я хочу сделать нечто подобное, используется не 10 методов WCF-сервиса, а все 250. Делать ко всему этому обертки в таком стиле будет очень утомительно. Кто что может порекомендовать?
Есть десктопный клиент и сервер WCF на C#, .NET4.5, TCP-соединение.
Клиент при подключении к серверу логинится, указывает номер рабочего места, имя пользователя, пароль, подписывается на события и так далее. Сейчас в случае остановки сервера клиент попросту потеряет соединение, и не подключится до тех пор, пока пользователь руками не перезапустит клиентскую программу.
Я хочу сделать так, чтобы клиент сам подключался к серверу, после того, как соединение один раз было успешно установлено. Как наилучшим образом это реализовать?
Есть еще один клиент, который переподключается сам, но там я это сделал довольно-таки сложным способом — создал класс, методы которого внутри себя используют несколько вызовов к сервису, и на каждый публичный метод есть внутренний метод-исполнитель
Выглядит это так
Один из публичных методов, его вызывают из GUI и прочих таких мест | |
| |
Внутренний метод, делает всю работу с WCF-сервисом | |
| |
Функция, принимающая на вход функцию с кучей аргументов и возвращающая ее же, с одним новым аргументом, а старые запомнены (карринг, но не совсем) | |
| |
Обертка, исполняющая внутренние методы, с указанным таймаутом и перезапуском соединения в случае ошибки | |
| |
Перезапуск соединения | |
| |
Как это работает — клиентский код что-то хочет сделать, вызывает публичный метод и за ожидаемое время гарантированно получает либо отказ, либо результат. В случае обрыва соединения из за сбоя сети, сервера или еще чего-то, будет запущен поток, пытающийся восстановить соединение, при этом все вызовы от клиентского кода в это время будут завершаться с отказом.
Проблема в том, что даже для использования в моем коде вся эта конструкция какая-то излишне громоздкая, трудоемкая. В рабочем же месте, для которого я хочу сделать нечто подобное, используется не 10 методов WCF-сервиса, а все 250. Делать ко всему этому обертки в таком стиле будет очень утомительно. Кто что может порекомендовать?
Дополнение | |
Если кто захочет написать про быдлокод — не стесняйтесь, когда это писалось, я был мало знаком с WCF | |
Здравствуйте.
Есть десктопный клиент и сервер WCF на C#, .NET4.5, TCP-соединение.
Клиент при подключении к серверу логинится, указывает номер рабочего места, имя пользователя, пароль, подписывается на события и так далее. Сейчас в случае остановки сервера клиент попросту потеряет соединение, и не подключится до тех пор, пока пользователь руками не перезапустит клиентскую программу.
Я хочу сделать так, чтобы клиент сам подключался к серверу, после того, как соединение один раз было успешно установлено. Как наилучшим образом это реализовать?
Есть еще один клиент, который переподключается сам, но там я это сделал довольно-таки сложным способом — создал класс, методы которого внутри себя используют несколько вызовов к сервису, и на каждый публичный метод есть внутренний метод-исполнитель
Выглядит это так
Как это работает — клиентский код что-то хочет сделать, вызывает публичный метод и за ожидаемое время гарантированно получает либо отказ, либо результат. В случае обрыва соединения из за сбоя сети, сервера или еще чего-то, будет запущен поток, пытающийся восстановить соединение, при этом все вызовы от клиентского кода в это время будут завершаться с отказом.
Проблема в том, что даже для использования в моем коде вся эта конструкция какая-то излишне громоздкая, трудоемкая. В рабочем же месте, для которого я хочу сделать нечто подобное, используется не 10 методов WCF-сервиса, а все 250. Делать ко всему этому обертки в таком стиле будет очень утомительно. Кто что может порекомендовать?
Есть десктопный клиент и сервер WCF на C#, .NET4.5, TCP-соединение.
Клиент при подключении к серверу логинится, указывает номер рабочего места, имя пользователя, пароль, подписывается на события и так далее. Сейчас в случае остановки сервера клиент попросту потеряет соединение, и не подключится до тех пор, пока пользователь руками не перезапустит клиентскую программу.
Я хочу сделать так, чтобы клиент сам подключался к серверу, после того, как соединение один раз было успешно установлено. Как наилучшим образом это реализовать?
Есть еще один клиент, который переподключается сам, но там я это сделал довольно-таки сложным способом — создал класс, методы которого внутри себя используют несколько вызовов к сервису, и на каждый публичный метод есть внутренний метод-исполнитель
Выглядит это так
Один из публичных методов, его вызывают из GUI и прочих таких мест | |
| |
Внутренний метод, делает всю работу с WCF-сервисом | |
| |
Одна из похожих функция, принимающих на вход функцию с кучей аргументов и возвращающая ее же, с одним новым аргументом, а старые запомнены (карринг, но не совсем) | |
| |
Обертка, исполняющая внутренние методы, с указанным таймаутом и перезапуском соединения в случае ошибки | |
| |
Перезапуск соединения | |
| |
Как это работает — клиентский код что-то хочет сделать, вызывает публичный метод и за ожидаемое время гарантированно получает либо отказ, либо результат. В случае обрыва соединения из за сбоя сети, сервера или еще чего-то, будет запущен поток, пытающийся восстановить соединение, при этом все вызовы от клиентского кода в это время будут завершаться с отказом.
Проблема в том, что даже для использования в моем коде вся эта конструкция какая-то излишне громоздкая, трудоемкая. В рабочем же месте, для которого я хочу сделать нечто подобное, используется не 10 методов WCF-сервиса, а все 250. Делать ко всему этому обертки в таком стиле будет очень утомительно. Кто что может порекомендовать?
Дополнение | |
Если кто захочет написать про быдлокод — не стесняйтесь, когда это писалось, я был мало знаком с WCF | |