.NET Remoting is a very powerful way for writing distributed applications. What is also important to note is that it is very easy to use - users have a full comfort of working in local address space, but they are actually creating and using remote objects.

Object field contents are stored and methods are executed remotely. However, remote instances won't behave as you expected them to when you use static fields or methods in your remote class (one that ihnerits MarshallByRefObject). That's because static methods (and properties) are always executed locally. This actually means that non-static (object) and static (class) methods have different behavior, and you should keep this in mind when designing your remote class.

There is one curiosity regarding the static fields. It turns out that there are two copies of each of them - a local and a remote one! If you access the static field directly (if it is public), or via a static method or property, what you get is the value of the local copy. However, if you use a non-static method, it will be executed remotely and will thus return a remote value of the static field.

This may be a little bit confusing, so it is one more reason to be careful when you are considering the use of static data in your remote class.