I gave up on doing real .NET remoting in favor of WCF a long time ago. Recently I've been using RemotingLite and my own variant of it which also supports named pipes called DuoVia.Net. You simply write your interface contract and DTO's, share those in an assembly on client and server and write your implementation on the server side.
No client to produce. These libraries produce their own through reflection and dynamic assembly generation by emitting IL. Cool stuff. Have a look at how easy the client side is:
class Program
{
static void Main(string[] args)
{
var sw = Stopwatch.StartNew();
var ipEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8098);
var from = 0;
var to = 500;
Parallel.For(from, to, index =>
{
using (var client = new NetTcpTesterProxy(ipEndpoint))
{
var id = client.GetId("test1", 3.314, 42);
var response = client.Get(id, "mirror", 4.123, 42);
var list = client.GetItems(id);
}
});
sw.Stop();
var msperop = sw.ElapsedMilliseconds / 1500.0;
Console.WriteLine("tcp: {0}, {1}", sw.ElapsedMilliseconds, msperop);
Thread.Sleep(5000);
var pipeName = "DuoViaTestHost";
sw = Stopwatch.StartNew();
Parallel.For(from, to, index =>
{
using (var client = new NetNpTesterProxy(new NpEndPoint(pipeName)))
{
var id = client.GetId("test1", 3.314, 42);
var response = client.Get(id, "mirror", 4.123, 42);
var list = client.GetItems(id);
}
});
sw.Stop();
msperop = sw.ElapsedMilliseconds / 1500.0;
Console.WriteLine("pip: {0}, {1}", sw.ElapsedMilliseconds, msperop);
Console.ReadLine();
}
}
Have fun!