Boundaries: Processes and Application Domains
Modern operating systems and run-time environments need to protect individual applications from the failure of other applications. Microsoft Windows operating systems protect applications from each other by running each application in its own process. If an application fails for some reason, only that process is affected; applications in other processes continue to perform. Of course, because memory addresses in one process have no meaning in another process, it can be somewhat complex to call functions in one process from some other process. Marshaling ** is the term given to the events that occur when a call, and any arguments, are packaged in one process and unpackaged in another so that a call across a process boundary can be successful.
In the managed environment, application domains (which you can think of as logical processes) and contexts ** provide isolation and security at less cost and with greater ability to scale well than an operating-system process by relying on, among other things, the fact that managed code is verifiably type-safe. Every managed application runs in an application domain, whether another application starts a domain on its behalf or the host environment starts one for it. .NET remoting provides the infrastructure to communicate between application domains in a straightforward manner, protected by security technologies.
See Also
Making Objects Remotable | Application Domains | Inside the .NET Framework