In Exchange Server 2007 SP1, the EWS team added a new feature called EWS Request Proxying. It is sometimes also referred to as EWS Proxy or HTTP Proxy. Not much has been said about this feature, but if you care about performance, it is important to understand why it is there, why you want to avoid it if at all possible, and if you cannot avoid it, why it is important to have. What is it? EWS Request Proxying only comes into play in Exchange installations that have multiple Active Directory sites. If you have a single AD site, you can stop reading this post right now. Now that our readership has become smaller, let's continue. Active Directory sites are typically created to define a boundary of highly connected computers and devices. This implies that accessing resources cross-site is more (potentially much more) expensive than accessing resources within a single site. EWS lives on a Client Access Server (CAS) within a specific site. If the mailbox that EWS is trying to communicate with resides on a mailbox server in a different Active Directory site, the ensuing RPC calls between EWS and the mailbox server will be made across a potentially expensive cross-site link. Depending on the EWS operation that is being performed, there may be *many* resulting cross-site RPC calls. To combat this potentially expensive RPC chattiness, when EWS encounters a request that needs to be serviced in another AD Site, it will actually package the entire request up and make an EWS request to a CAS server in the destination site rather than face cross site RPC calls. The initial CAS box is proxying the inbound HTTP request to a more appropriate CAS server, which is why you will sometimes hear this feature referred to as "HTTP Proxy". In Exchange 2007 SP1, EWS determines the "best CAS" to proxy to by scoring all the items in the request and determining which site can service the most items. The downside of this is that IF your request needs to access mailboxes in multiple AD sites, you WILL encounter cross site RPC calls since EWS does not "split up" requests.
|