Project Description
An alternative means of remoting for .NET to allow for intuitive usage and easy implementation into existing code.

The idea of implementing remoting will give most programmers instant heartburn. Granted, I’m not an expert on all the existing remoting solutions, but I haven’t found one that works intuitively.

All the different solutions I’ve seen require just about double the code. You write a method once, then write a wrapper for the method to implement remoting.

Furthermore, they often require special handling to make sure the contextual variables are maintained. For example, when I was working with CSLA recently, I was appalled to see:

customer = customer.Save();

The Save() method executes remotely, so the customer object that comes back has a separate memory reference. Surely, we can get around this.

So I set out to write my own. I had 4 main goals. I wanted to be able to:
// Remote any method with no code changes to the business object
Remoting.Execute(customer.Save);

// Executes remotely, and updates the object
Debug.Assert(customer.ID > 0);

// Execute an anonymous method and update the contextual variables
int x = 0;
Remoting.Execute(() => { x = 1; });
Debug.Assert(x == 1);

// Handle anonymous types, generics
var answer = Remoting.Execute(()=>new { y = x + 1 });
Debug.Assert(answer.y == 2);

Last edited Apr 2, 2010 at 3:53 AM by andyedinborough, version 2