Несколько лет назад я разработал и внедрил критическую бизнес-систему, в которой использовалось .NET Remoting. У нас был клиент, реализованный в виде графического интерфейса Windows Forms, сервер, реализованный в виде службы Windows, и база данных SQL Server.
Я предназначен для устранения неполадок / отладки / разработки, поэтому одним из моих первых критериев проектирования было то, что я мог тривиально удалить всю реализацию .NET Remoting и запустить всю систему на своем рабочем столе. Таким образом, я мог деактивировать удаленное взаимодействие, изменив настройку одиночной логической конфигурации на «false» = off. Затем я мог бы устранять неполадки, отлаживать, разрабатывать полностью без издержек или вмешательства .NET Remoting.
Похоже, это было бы полезно и для вашей ситуации. На самом деле, я не могу представить ситуацию, в которой это нежелательно, тем более что ее легко реализовать.
Итак, для его реализации каждый клиент и серверный код использовали параметр конфигурации, чтобы решить, какой класс реализации создать для связи с другой стороной. Все взаимодействие происходило через пользовательский интерфейс C #, который имел два конкретных класса реализации на каждой стороне: один класс реализовывал связь с использованием .NET Remoting, другой класс реализовывал связь как прямое сквозное прохождение (прямые вызовы).
Только одна пара классов (по одному на каждой стороне) знала что-либо о .NET Remoting, поэтому изоляция была полной. Большую часть времени все разработчики работали с отключенным удаленным доступом, что было быстрее и проще. Когда им было нужно, в редких случаях они включали его (в основном только я или когда кто-то подключался к тестированию / производству для устранения неполадок).
Кстати, я сделал интерфейс удаленного взаимодействия очень простым:
Публичный ответ выполнить (Запрос)
Кроме того, я также использовал упомянутую выше подсказку по запуску отладчика, и я согласен, что вам следует помнить о влиянии на многопоточность GUI.