RPC Client Access Array.....confused!


  • Hi folks, maybe one of you could enlighten me on something.

    I have 4 CAS Servers, 4*2010 Mailbox Servers and 40 Active Databases. Last week I had a power failure at one site, so 2 CAS servers were instantly unavailable (UPS failed also).  We ONLY have Outlook Anywhere connections into our environment, there is NO direct MAPI access. Outlook Anywhere is Published via ISA 2006 for the external Outlook people, with an ISA Web Farm that sends the connections onto the 4 CAS Servers internally.

    We *thought* we would not need an RPCClientAccessArray prior to this as we have no Direct Mapi Access, but when the power *went* we noticed that various users noticed their Outlook Clients constantly trying to reconnect to the unavailable CAS Servers.  Sooo, I decided to test and implement a CAS Array.  But I am seeing odd behaviour in my Lab.

    1. In my Testlab, I have set the RPCClientAccessServer setting on my 4 Test Databases to be "array1.domain".
    2. In order to avoid using WNLB if possible, I decided to set the HOSTS file on each Test CAS Server so that resolved to array1.domain 
    3. I then created an Autodiscovered Outlook 2007 profile and I can see that Outlook configures itself with "array1.domain" as the Server.  . 
    4. I made an Outlook Anywhere connection from an external client, and I could see that the *user count* counter on one of the CAS Servers incremented by 1 so I know which CAS is handling my RPC connection.
    5. I then *dirtily* power down that test CAS Server, and can see in Outlook Anywhere that my Connection drops, and then beautifully reconencts and I can see on my OTHER Test CAS Server that IT now has 1 *user count* .

    So, I think brilliant, it works very nicely.

    HOWEVER. I then clear the hosts file on 1 of the 3 Test CAS Servers (CAS_A) Servers so that now there is no reference to array1.domain anywhere (I have no entry in localhosts file, I have no DNS entry anywhere that refers to array1.domain).

    1. I remove CAS_B and CAS_C from the ISA WEB farm and physically power them down in my testlab so that NO connections for Outlook Anywhere can be sent to them.
    2. I connect once again with Outlook Anywhere, expecting that it will fail because CAS_A  is the only available CAS Server and will have absolutely no idea what array1.domain refers to (array1.domain being the RPCCLientAccessServer stated on the Databases).  BUT, it works!

    Why does this work? I'm stumped as to how this can work? Am I missing something absolutely simple about the mechanics of the RPC service in Exchange 2010? My understanding was that I make an RPC connection, ISA sends me to a CAS, that CAS then queries AD and determines what the RPCClientAccessServer for my Database is, and sends me to that CAS to be actioned.  HOWEVER, the RPCClientAccess Server on my Database is "array1.domain" and this is not present in DNS, and is not present in the Hosts file on my CAS... How can my RPC connection be getting processed?

    p.s. Just to note, I did also try this with NLB and a DNS record...


    Wednesday, February 22, 2012 9:24 PM




    Here is the Outlook Anywhere connections:

    1. External Outlook client send https request to the proxy server (Proxy Server is the one that you set when you enabling the ROH feature on CAS).

    2. The RPCproxy virtual directory (IIS) take the request and determine the Mailbox of the user.

    3. Then CAS server communicate the MBX server via RPC.

    Therefore, the first server that Outlook tries to connect to is a proxy server but not the one you set in RPCClientAccessServer.



    Friday, February 24, 2012 9:59 AM