Multiplayer server-client setup

Greetings everyone!

I’m working on a multiplayer game, and have run into a snag, regarding the multiplayer part.

The game is a non-physics 2D game (with some 3D elements) of one to many (hundred) players.

For the networking, I want to use an authoritative server structure, where the clients submit their actions, and the server modify the gameworld and broadcast the changes, both to ensure that everyone is in sync with the same gameworld, and to minimize cheating.

I want the user to be able to start a game, and have friends join that game, using LAN or a matchmaking server, and I want the user to be able to start a dedicated server, and have friends join that game instead.

As I want the singleplayer part to be a local instance of multiplayer with only one player (much like how Space Engineers do it), I’m guessing my best option is to build the client and server parts separately, using Unity for the client part, and .Net for the server part, and then starting the server as a new process, when starting a singleplayer game or hosting a multiplayer one (not dedicated).
This way, if the user want to host a dedicated server, he doesn’t need to have the client running.

I looked into building the whole thing on unity, but as far as I can tell, unity doesn’t support sending [RPC] requests to itself, as both the client and server.

I think I read somewhere that uLink support this, however I don’t want to pay for a license, before I KNOW that is exactly what I need, and a 30day trial is to little time.

so, I guess my question is, what would be the best way of attacking this?
Am I on the right track with the way I plan to implement this, or is there a much better method, that I haven’t thought of?
And if this IS the best way, is there a way to use the unity networking to connect to a .net server?

Thanks for your time and answers!

P.s. the gameworld is meant to be a persisting world, so I’ve chosen to implement it in an embedded SQLite database, which the server part need to modify.

P.P.s. I use the free unity license.

So u wanna send an email to a person that is sitting next to you instead of speaking to him/he directly? Instead of making an RPC call just call the function like u normaly do. What u need is to know if the client and server are the same machine by checking the IP.