Server.TransferRequest is a new API in the IIS 7.0 release of ASP.NET. It is essentially a server-side redirect. When invoked, a new request context is created, called the child request, and it goes through the entire IIS 7.0/ASP.NET integrated pipeline. The child request can be mapped to any of the handlers configured in IIS, and it’s execution is no different than it would be if it was received via the HTTP stack. The parent request jumps ahead in the pipeline to the end request notification, and waits for the child request to complete. When the child request completes, the parent request executes the end request notifications and completes itself.
Recently an issue was brought to my attention by Luis Abreu. Attempts to use Server.TransferRequest between the AcquireRequestState and ReleaseRequestState notifications will hang when session state is in use. Luis does a great job of describing the problem, so let me just add that we will fix this as soon as possible.