Я не представляю что вы подразумеваете под RPC, от чего он вам кажется таким сложным.
моя идея всего лишь в том, что с клиента на сервер надо передать:
1. имя функции (или какой либо другой идентификатор функции)
2. серелизовать аргументы.
Делая так, вы сможете на сервере, например, легко через рефлексию организовать проброс вызова в конкретный объект, что бы на нем оно выполнилось с заданными аргументами. т.е. на сервере будет проще.
С другой стороны на клиенте вы сможете свободно сделать некий инструмент для вызова функций на сервере, возможно даже асинхронную. Тогда на клиенте вы сможете сделать простой singelton объект с рядом ваших функций.
Обратите внимание, что я не говорил о том, как в частности должна выполняться серелизация DTO на запрос исполнения метода. Можно, как вы и сказали, класть все значения в URL, если вас не беспокоят соответствующие ограничения. Можно и в тело POST запроса и т.д.
Я это все вот к чему. Тот вариант, который был озвучен выше, но не мной, напоминает скорее переизобретение того что уже есть, и поиск грабель.