In this blog post we will be going through how free/busy works in detail in both Outlook 2003/Exchange 2003 and Outlook 2007/Exchange 2007, then how they interact together.
As most of us know Free/Busy information is stored in a system public folder called SCHEDULE+FREE BUSY which is replicated to all exchange servers setup as a public folder replica server. SCHEDULE+FREE BUSY contains subfolders for each exchange administrative group.
Question. What places the Free/Busy information into the SCHEDULE+FREE BUSY system public folder?
This is actually done by the outlook client - not exchange at all. Outlook publishes the free/busy data for a user once every 15 minutes and again when Outlook is being shut down. Every message includes the entire free/busy information for the corresponding user that ranges from the current month to two months in the future.
Calendar information is stored in the users mailbox, only free/busy information is stored in the public folders.
Question. What about Outlook Web Access and Windows Mobile Devices?
Outlook Web Access and Outlook Mobile Access do not publish any free/busy data directly. Instead they rely on a free/busy publishing agent that is called MSExchangeFBPublish with runs as a part of the System Attendant Service. Its two functions are:
- Publishing free/busy data
- Deleting duplicate free/busy messages
In Exchange 2007 the availability service on the client access server has taken over the role of public folders. Outlook clients find out which is their local client access server using autodiscover. Now there is a section within each users mailbox that contains the free busy information that all users can access by default to check a users availability status as shown in the below screenshot:
Users do not have permission to the other users mailbox directly for free/busy, they need to access this data through the availability service which is of course a IIS web application. By default you need to be authenticated to use the availability service meaning only users with domain credentials can access this data.
When a user updates his calendar, it also updates the availability data section under the users mailbox stored inside the edb file which the availability service just fetches.
I want to also point out here that the availability service also runs the calendar assistant which does things like automatically accept meeting requests in a tentative state, while waiting for your reply, hence writing data to your calendar under your mailbox on your behalf. You can change this behavior however in outlook calendar options:
One more thing i'd like to point out about the availability service - it only talks to the mailbox servers using MAPI. If it needs to talk to a mailbox server in another site, it will relay the request via HTTP/HTTPS to the client access server in that site, then to the mailbox server via MAPI. Remember if you are going to put exchange in a remote site you always need client access, hub transport and mailbox role at least.
How does the legacy Free/Busy system work with the new one?
The availability service has the ability to recieve free/busy information from both public/folders and user mailboxes to provide free/busy information to outlook 2007 clients. The availability service does not update data in public folders or user mailboxes, it only recieves!
Question. What updates the information in the public folders for legacy outlook 2003 clients?
If you remember when you install exchange 2007 it asks you "do you have legacy outlook clients in your environment?". Something along those lines... if you click yes it creates a public folder system database that your mailbox databases reference. If this exists and you create an appointment on an outlook 2007 client, outlook 2007 will update both the public folders free/busy along with its own mailbox database. Yes, it updates both! If the public folders system free/busy does not exist it will just update its own mailbox.