I have a remoting server that I am successfully using as such. That assembly references a proxy assembly that defines all of the interfaces that will be passed around when a client makes use of the remoting server.
The server itself uses a plugin architecture. I don't think having the plugins access the server object by way of remoting makes any sense; I think the plugin should reference the actual assembly that implements the server and make use of server-defined types. Otherwise, the plugins will have to reference the proxy assembly and I think that's unnecessary.
What is considered to be the "correct" way to handle this? Initially, I was going to have a common object used by both the remoting clients and the plugins and that object would have two sets of entry points -- one returning proxy-defined interfaces and the other returning server-defined types. But, this needs to be repeated for every type that is now being handled as a proxy-defined interface; each would have to define two sets of entry points. That way, the remoting clients only need to reference the proxy assembly and not the server assembly, and the plugins only need to reference the server assembly and not the proxy assembly. Or maybe two versions of that object, one for remoting and one for plugins.
Is there a better way?