Every program hosted by the Common Language Runtime lives within the confines of an application domain, the fundamental boundary of application isolation within the .NET Framework. When one object wants to communicate with an object in another application domain, remoting is what makes it possible.
Each assembly exposes the types it contains, and those types are exactly the same, regardless of the programming language used. Combine this feature with serialization and reflection, and some of the major pieces of the .NET puzzle fall into place. The remoting framework makes heavy use of all these technologies.
There are many choices to consider when remoting objects, including channel, activation model, type of server, and configuration. Each choice is discussed in context throughout the chapter. Rather than a reference to remoting, this chapter represents more of a "code along" story. This story has many twists and turns, so it's better to start at the beginning and enjoy the ride.