Boundaries: Processes and Application Domains
This topic is specific to a legacy technology that is retained for backward compatibility with existing applications and is not recommended for new development. Distributed applications should now be developed using the Windows Communication Foundation (WCF).
Modern operating systems and run-time environments must protect individual applications from the failure of other applications. This protection mechanism is implemented by using processes and application domains.
Windows operating systems protect applications from each other by running each application in its own process. If an application fails, 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 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 (or 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 helps to provide the infrastructure to communicate between application domains in a straightforward way, protected by security technologies.