Advanced .NET Remoting is divided into two parts. The first part (Chapters 1 through 6) covers everything you need to know for developing distributed applications within the .NET Framework. The second part (Chapters 7 through 11) gives you a thorough technical insight that will allow you to really understand what's happening behind the scenes and how you can tap into customizing the framework to suit your exact needs. Following is a brief chapter-by-chapter summary of the topics covered in this book.
This chapter gives you a short introduction to the world of distributed application development and the respective technologies. It presents some scenarios in which .NET Remoting can be employed and includes historical background on the progress and development of various remoting frameworks during the last ten years.
This chapter gets you started with your first remoting application. Before going directly into the code, I present the distinctions between .NET Remoting and other distributed application frameworks. I then introduce you to the basic types of remote objects, which are server-activated objects and client-activated objects, and show you how to pass data by value. I also give you some basic information about lifetime management issues and the generation of metadata, which is needed for the client to know about the interfaces of the server-side objects.
In this chapter, I demonstrate the key techniques you'll need to know to use .NET Remoting in your real-world applications. I show you the differences between Singleton and SingleCall objects and untangle the mysteries of client-activated objects. I also introduce you to SoapSuds, which can be used to generate proxy objects containing only methods' stubs.
This chapter introduces you to the aspects of configuration and deployment of .NET Remoting applications. It shows you how to use configuration files to avoid the hard coding of URLs or channel information for your remote object. You also learn about hosting your server-side components in Windows Services and IIS.
This chapter shows you how to leverage IIS' features when it comes to hosting your components in a secured environment. In this chapter you learn how to enable basic HTTP sign-on and the more secure Windows-integrated authentication scheme, which is based on a challenge/response protocol. You also see how to enable encrypted access by using standard SSL certificates at the server side.
As a developer of distributed applications using .NET Remoting, you have to consider several fundamental differences from other remoting techniques and, of course, from the development of local applications. These differences, including lifetime management, versioning, and the handling of asynchronous calls and events, are covered in this chapter.
.NET provides an unprecedented extensibility for the remoting framework. The layered architecture of the .NET Remoting Framework can be customized by either completely replacing the existing functionality of a given tier or chaining new implementation with the baseline .NET features.
Before working on the framework and its extensibility, I really encourage you to get a thorough understanding of the existing layers and their inner workings in this architecture. This chapter gives you that information.
This chapter covers the instantiation of message and channel sinks and sink chains. It shows you the foundation on which to build your own sinks-something you need to know before tackling the implementation of custom sinks.
This chapter builds on the information from Chapters 7 and 8 and shows you how to implement custom remoting sinks. This includes channel sinks that compress or encrypt the transported information, message sinks to pass additional runtime information from a client to the server or to change the .NET Remoting programming model. This chapter concludes with showing you how to implement custom remoting proxies that forward method calls to remote objects.
This chapter builds on the information you gained in Chapters 7, 8, and 9 and presents the development of a custom .NET Remoting channel that transfers messages via standard Internet e-mail by using SMTP and POP3. It shows not only the implementation of this channel but also the necessary phase of analyzing the underlying protocol to combine it with the features and requirements of .NET Remoting.
This last chapter is about message-based processing in local applications. Here you learn how you can intercept calls to objects to route them through IMessageSinks. This routing allows you to create and maintain parts of your application's business logic at the metadata level by using custom attributes. You also discover why it might be a good idea to do so.