Вы должны быть в состоянии запустить сервер одновременно, но я думаю, что более чистое решение состоит в том, чтобы абстрагировать вызовы удаленного сервера в интерфейс или набор интерфейсов. Вы можете разместить свой существующий код в одной реализации, а локальный сервер - в другой. Это просто вопрос привязки соответствующей версии.
Версией localhost может быть просто прямой вызов на сервер, возможно, имитация одностороннего вызова с помощью службы исполнителя. Должно быть некоторое повышение производительности, так как вам не нужно тратить дополнительное время на сериализацию и десериализацию ваших сообщений. Абстрактный фасад хорош тем, что вы можете разместить готовые реализации для тестирования.
Что касается запуска сервера в том же процессе, что и у клиента, на этом не должно быть никаких ограничений, кроме того, что сервер запускается первым;)