This has been a rather long chapter, but you should have gleaned from this chapter the following points:
Remote objects are easy to build and easy to use.
Remoting provides a consistent programming model.
Binary format can transfer any .NET object.
SOAP allows for interoperability between .NET and non-.NET platforms.
SingleCall, Singleton, and Client-Activated models allow for much flexibility in designing your remoting service.
Synchronous and asynchronous calls allow for a responsive application that scales easily.
Remoting allows the programmer to extend the channel and formatters. It is possible to hook into the remoting services at almost any level. You have seen two examples of how to hook into IServerChannelSink and IClientChannelSink ...