Client/server programming is notoriously inflexible. In a typical setup, the weakest part of the system the client is forced to perform almost all the processing work. Too often, the server acts as a glorified data store and file server. However, distributed application architecture gives you the flexibility to distribute the workload among the different parts of the system as you see fit. In many cases, this means centralizing logic in a middle tier, where you can pool objects, reuse connections, and cache data. In other cases, this might mean taking some of the work away from the server and splitting it among multiple idle workstations. In the case study presented in this chapter, we examine a company that's migrating from a simple client/server based application to a full distributed system. This company, Trey Research, has a simple need: to move the functionality of its server-side application to the client while still retaining the processing power of the server. Our solution is simple, logical, and far easier to maintain than a comparable client/server approach would be. It also demonstrates best practices for a ticket-based security system, a COM+ transaction, and a dash of asynchronous programming. |