You are on page 1of 28

This document is provided as-is.

Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. Some examples depicted herein are provided for illustration only and are fictitious. No real association or connection is intended or should be inferred. This document does not provide you with any legal rights to any intellectual property in any Microsoft product. You may copy and use this document for your internal, reference purposes. Copyright 2011 Microsoft Corporation. All rights reserved. Microsoft, Active Directory, Lync, Outlook, and SharePoint are trademarks of the Microsoft group of companies. All other trademarks are property of their respective owners.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 2

This chapter is part of the Microsoft Lync Server 2010 Resource Kit book that is currently being developed. Chapters will be available for download while this book is being completed. To help us improve it, we need your feedback. You can contact us at nexthop@microsoft.com. Please include the chapter name. For information about the continuing release of chapters, check the DrRez blog at http://go.microsoft.com/fwlink/?LinkId=204593.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 3

Contributors
Project Manager: Susan S. Bradley Content Architect: Rui Maximo Chapter Lead: Cindy Kwan Technical Reviewers: Stuart Birkett, Thomas Lee, Ramesh Narayanan, Steve Wood, Tracy Zheng Lead Editor: Katrina Purcell Art Manager: Jim Bradley Production Editor: Kelly Fuller Blue

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 4

Table of Contents
Contributors................................................................................................................4 Introduction................................................................................................................ 6 Unified Contacts......................................................................................................... 6 Contact Synchronization .........................................................................................7 Contact Merge.........................................................................................................9 Search Result Aggregation....................................................................................12 Contacts List..........................................................................................................12 Server-Based Search................................................................................................15 Exact Match Search...............................................................................................16 Server indexes...................................................................................................17 SOAP Request and Response.............................................................................18 Prefix Match Search...............................................................................................21 Local Cache ..........................................................................................................24 Organizational Data...............................................................................................25 Summary..................................................................................................................28 Additional Resources................................................................................................28

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 5

Introduction
This chapter focuses on contacts in Microsoft Lync 2010 and how they are handled by the Address Book Service, including contact synchronization with Microsoft Exchange Server and Microsoft Outlook messaging and collaboration client, contact merging, and contact search.

Unified Contacts
In Lync 2010, Lync contacts are unified with Microsoft Exchange Server personal contacts. By unifying contacts with Microsoft Exchange Server, Lync contacts are accessible from any client that connects to Microsoft Exchange. In addition, the Lync client provides richer views of contacts in its UI by aggregating contact data from the global address list (GAL) and Microsoft Exchange. Unified contacts consist of three main components: Contact synchronization with Microsoft Outlook contacts: Lync ensures that there is an Outlook contact associated with every contact added to the Lync Contacts list. Contact data aggregation from the Microsoft Exchange GAL, Outlook, and Microsoft Lync Server 2010: Lync aggregates contact data from the three data sources and presents a unified view of the contact in the Contacts list, contact card, and search results. Search results aggregation: In Microsoft Office Communicator 2007 R2 and Microsoft Office Communicator 2007, when a contact was stored in both Outlook personal contacts and the GAL, search would return duplicate results. This behavior has been changed in Lync. Outlook and GAL entries are aggregated so that search displays a single result per contact.

Figure 1 illustrates the call flow for unified contacts. This call flow is executed the first time the contact is shown for a sign in session. A contact model is created for each contact in Lync. A contact model refers to the Lync in-memory representation of contact information. When the contact model is created, Lync fetches data for the contact from three data sources: presence from Lync Server, GAL, and Outlook personal contact data from Microsoft Exchange. In the case where the Lync contact is not a personal contact on Microsoft Exchange, Lync creates an Outlook personal contact. Outlook personal contact creation happens immediately if there is a Microsoft Exchange Server 2010 or later connection.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 6

Figure 1. Call flow for unified contacts

The following sections describe the purpose and function of each of the processes.

Contact Synchronization
Contact synchronization requires the user to have a Microsoft Exchange Server 2010 mailbox. In addition, the server running Microsoft Exchange must have Exchange Web Services configured. Contact synchronization is enabled by default, and can be turned on or off by a Lync Server in-band provisioning setting, EnableExchangeContactSync. When EnableExchangeContactSync is set to FALSE, contact synchronization is disabled. If EnableExchangeContactSync is not configured or turned on, then contact synchronization is enabled. The user can also enable or disable contact synchronization in Lync through the Lync Options dialog box under the Personal tab, in the group box, Personal information manager. Contact synchronization can be configured by selecting or clearing the Save my Lync contacts in my personal contacts folder on the Exchange server option. This user setting overrides the in-band provisioning setting configuration.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 7

Figure 2. The Lync Options dialog box

When contact synchronization is turned on, Lync creates Outlook personal contacts for the contacts the user manually added to the Lync Contacts list. For each contact in the Contacts list: 1. Lync checks whether there is a corresponding Outlook contact by comparing the following settings: o o o o Outlook contact IM address matches the Lync contact SIP Uniform Resource Identifier (URI) Outlook contact email1/2/3 address matches the Lync contact SIP URI Outlook contact IM address matches the Lync contact primary/secondary SMTP address Outlook contact email1/2/3 address matches the Lync contact primary/secondary SMTP address

If any of these checks are true, then Lync does not create a duplicate Outlook entry.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 8

2. If Lync cannot find an existing Outlook contact that matches the Lync contact, then Lync creates a new Outlook contact in the default contacts folder of the users mailbox. When an Outlook contact is created, Lync populates the contact with data from Active Directory Domain Services (AD DS) and Lync Server. Depending on the type of Lync contact (such as GAL, phone only, or federated/public internet connectivity contact), the following fields of the Outlook contact are populated at the time of creation: o o o o o o o o o o Full name File as Job title Company Email1 address Web page IM address Business phone Home phone Mobile phone

Contact synchronization allows users to access Lync contacts from applications and devices that connect to Microsoft Exchange.

Contact Merge
Lync aggregates contact information from multiple data sources and surfaces information in the Contacts list, contact card, and search results. Lync performs duplicate contact detection by comparing the following properties of the Outlook contact and the GAL contact: SIP URI or instant messaging (IM) address Primary SMTP address All secondary SMTP addresses

If any of the values of these properties match between the Outlook and GAL contacts, then Lync merges the contacts. All contact data shown in Lync honors the following fallback logic with the exception of the Call menu. For each property shown in Table 1: If source1 is not empty Property = source1 Else if source2 is not empty Property = source2 Else Property = source3 End

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 9

Where Property, source1, source2, and source 3 are defined in Table 1.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 10

Table 1.

Property Display name Photo Title Company Department Office Organization (for example, Manager) Web Page (for example, MySite) Alias (mail nickname) Name Pronunciation Location Calendar Free/Busy Presence Status/Activity IM address (SIPURI) Email (primary SMTP address) Work Phone Home Phone Mobile Phone Other Phone

Source 1 Outlook contact Presence AD DS AD DS AD DS AD DS AD DS

Source 2 Presence AD DS Presence Presence Presence Presence Presence

Source 3 AD DS

Outlook contact Outlook contact Outlook contact Outlook contact

AD DS

AD DS AD DS Presence Presence Presence

Presence AD DS

AD DS Outlook contact AD DS AD DS AD DS AD DS

Outlook contact Presence

Presence Presence Presence Presence

Outlook contact Outlook contact Outlook contact Outlook contact

For properties not listed in the table, the property values come from the following sources:

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 11

Source 1 AD DS Source 2 Lync Server Source 3 Outlook Source 4 Microsoft SharePoint (only for skill search results)*

*For skills search, the hit highlights shown in the third and fourth line of search results are returned from SharePoint Designer only. For the Call menu, phone numbers from AD DS, Lync Server, and Outlook contacts are aggregated and displayed.

Figure 3. Call menu

Search Result Aggregation


Search result aggregation uses the same contact duplicate detection logic as contact merge. The purpose of search result aggregation is to eliminate duplicate Outlook and GAL entries appearing in the search results. When an Outlook contact and GAL contact are matched, instead of returning two separate entries in the search results, only one entry is shown in the search results and the contact data from the two sources is aggregated by using the contact merge algorithm. One caveat is search merge does not aggregate multiple Outlook contacts. If there are duplicate Outlook contacts representing the same contact entity, there is one entry per Outlook contact in the search results.

Contacts List
The user Contacts list consists of contacts organized into groups. The user can add the following contact types to the Contacts list: Outlook personal contacts

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 12

GAL contacts. As mentioned in the Unified Contacts section, Lync client creates an Outlook contact for all users added to the Lync Contacts list if an existing Outlook contact does not already exist. Phone only contacts Response groups and hunt groups

Contacts must be added to a group. Lync supports four group types: User created groups. The user can create custom groups in Lync by doing one of the following: o o Right-clicking a group header in the groups view, and then selecting the Create Group option. Clicking the + button in search results, and then selecting the Add to new group option.

User created groups can be renamed or deleted by the user. Contacts can be added or removed from user-created groups by the user. When a contact is removed from a contact group, the contact is not moved to the Other Contacts group. For such contacts, the Remove from group and Remove from Contacts list options in the right-click shortcut menu removes the contact from the Contacts list. This is a change in behavior from previous versions of Lync. Distribution groups. Users can add GAL distribution groups to the Contacts list by searching for the distribution group, and then clicking the + button in search results. When a distribution group is added to the Contacts list, the distribution group members are not added to the Contacts list. Subsequently, if the distribution group membership changes in the GAL, these changes are reflected in Lync. Users cannot add contacts to a distribution group by using Lync. Lync has a limit on the number of distribution groups that can be added to the Contacts list. By default, Lync allows each user to add up to 10 distribution groups. This limit is configurable by using the following in-band provisioning setting: MaximumDGsAllowedInContactList. Frequent Contacts. The Frequent Contacts group is a special group. It consists of contacts that the user has pinned to the Contacts list, and up to 10 systemgenerated contacts determined by the users organizational hierarchy and user communication patterns. When Lync starts for the first time, the Frequent Contacts group is auto-populated with the users manager and direct reports. Additional contacts are dynamically added to this group based on the users IM and call patterns. Using a local cache, Lync keeps track of the number of times a user has used IM with a particular contact or called a contact. If the user has interacted with a contact more than n number of times by using Lync (where n = 4), the contact is automatically added to the frequent contacts group. In addition, there is an aging interval related to the frequent contacts group. The aging interval kicks in every 28 days and decrements

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 13

the weighting for all frequent contacts. If the user stops interacting with a contact, the contact is eventually removed from the Frequent Contacts group. For example, the user sends an instant message to Contact A. If Contact A is not an existing contact in the frequent contact cache, then Lync adds Contact A to the cache and assign a weight of 8192. The next time the user sends an instant message or calls Contact A, Lync increments the weight by a value of 8192. Every 28 days, Lync decrements the weight of contacts in the frequent contact cache. The intention is to age and remove contacts that the user no longer interacts with. The decrement internal is usually half of the increment interval (so in this example, since the interval incremented was 8192, the decrement interval becomes 4096). Lync surfaces the top 10 contacts from the cache with a weight greater than n where n is 4 times the increment weight (for example, 4*8192 = 32768). The user has an option of pinning a contact to the Frequent Contacts group. Users can pin a contact by right-clicking a contact and then selecting the Pin to Frequent Contacts option, or dragging and dropping a contact in the Frequent Contacts group. Pinning a contact ensures that the contact always appears in the Frequent Contacts group even if the user does not frequently interact with the person through IM or frequently call the person. Pinned contacts always appear before the unpinned or system-generated contacts. Pinned and system-generated contacts are separated by a line. Pinned contacts are considered part of the users Contacts list because the user has explicitly taken action to pin this contact.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 14

Figure 4: Pinned contact and system generated contacts in the Frequent Contacts group

Other Contacts. This is the default group that has been automatically created by Lync. Lync requires that all contacts added to the Contacts list be a member of at least one group. The Other Contacts group is a special group because it cannot be renamed or deleted by the user. If there are no other groups (for example, user created groups or distributions groups) in the users Contacts list, then the Other Contacts group appears as the All Contacts group.

Server-Based Search
Server-based search is a new search mode in Lync 2010. Server-based search usage can be configured by using the in-band provisioning setting, AbsUsage. This in-band provisioning setting can have three possible values: WebSearchAndFileDownload. IP phones (for example, Aastra 6721ip common area phone or Polycom CX700 IP desk phone) use server-based search, and Lync 2010 clients use GAL download. This is the default.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 15

The Lync desktop client defaults to GAL download for the following reasons: There may be temporary outages for the Address Book Service depending on the server maintenance schedule. When the Address Book Server is unavailable, all prefix and exact match searches (described in the next sections) fail. Server-based search does not work in branch office resiliency mode.

WebSearchOnly. Both IP phones and Lync 2010 clients use Server-based search. FileDownloadOnly. Both IP phones and Lync 2010 clients use GAL download. Figure 5 illustrates the data flow for server-based search. Server-based search can be used for both exact and prefix searches. The following sections describe the difference between exact and prefix match searches, and the various scenarios when the Lync client would perform an exact match search versus prefix match search. The Lync client sends a SOAP query through HTTPs to the users Front End pool. Search results are returned in an XML format.

Figure 5. Data flow for server-based search

Exact Match Search


Exact match search is performed by the Lync client whenever it needs GAL contact data for a specific contact. In an exact match query, the Lync client requests the GAL contact data by using a SIP URL or email address. Passing a SIP URL or email address in the request ensures the GAL contact data returned is unique because the SIP URI and email address are both unique contact identifiers. The following are examples where the client queries the server for exact search matches:

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 16

Contact resolution for all contacts and Outlook contacts during sign in: The client imports Outlook personal contacts during sign in. For each Outlook contact, Lync creates a contact model and tries to match each Outlook contact to a GAL entry for contact merge.

Also during sign in, the client gets the list of contacts from Lync Server. A contact model is created for each contact. The Lync client completes contact resolution and merge by sending a query to the Address Book Web Query service to look up a matching GAL contact. Presence subscription from Office applications: In order for presence to be available in Microsoft Office applications such as Outlook, SharePoint, and Microsoft Word, Office queries the users Lync Server to perform contact resolution and presence subscription on demand. For example, every time an email is opened in Outlook, Outlook queries Lync Server to obtain the SIP URI of all senders and recipients of the email and uses the SIP URI to query their presence information. The SIP URI query from Office triggers an exact match search against the Address Book Web Query service. Reverse number lookup for incoming or outgoing calls: For all incoming calls, Lync queries the Address Book Service for an exact match by using the callers normalized phone number. Contact resolution for distribution group expansion: When the user expands a distribution group by opening the contact card of a distribution group or expanding a distribution group that has been added to the Contacts list, the client queries the Address Book Service for contact resolution.

In the scenarios mentioned earlier, the client does a batch query (up to 50 contacts per query) whenever possible to minimize the server load.

Server indexes
The Address Book Service indexes the following GAL attributes for exact match:
Table 2. Indexed GAL attributes

Attribute Name

ExactMatch Index

Active Directory Object ID N/A (actually stored in another table but logically available here)

Mail proxyAddresses (without the scheme) msRTCSIP-

<user>@<host> <user>@<host> <user>@<host> Page 17

Microsoft Lync Server 2010 Resource Kit Address Book Service

PrimaryUserAddress telephoneNumber (number attributes if present) Mobile (mobile attributes if present) All except tel:+ prefix

All except tel:+ prefix

For example:
Table 3. Examples of indexed GAL attributes

Attribute Name Mail

ExactMatch Index Michele.Martin @contoso.net

proxyAddresses proxyAddresses msRTCSIPPrimaryUserAddress telephoneNumber Mobile

michhart@contoso.net michhart@contoso.net michhart@contoso.net 14255550126 12065550127

SOAP Request and Response


The following is an example of an exact match request for a value of sip:michhart@contoso.net against all attributes listed in the SearchOn attribute (see below SOAP request). The request asks for a single match and a list of attributes (see ReturnList attribute in SOAP request) to return for the match found. <soap:Body> <SearchAbEntry xmlns="DistributionListExpander"> <AbEntryRequest> <ChangeSearch xmlns:q1="DistributionListExpander" soapenc:arrayType="q1:AbEntryRequest.ChangeSearchQuery[1]"> <AbEntryRequest.ChangeSearchQuery> <AbEntryHash xsi:nil="1"/> <PhotoHash xsi:nil="1"/> <SearchOn>mail,proxyAddresses,telephoneNumber,mobile,msRTCSIPPrimaryUserAddress</SearchOn> <Value>sip:michhart@contoso.net</Value> </AbEntryRequest.ChangeSearchQuery> </ChangeSearch> <Metadata>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 18

<FromDialPad>false</FromDialPad> <MaxResultNum>1</MaxResultNum> <ReturnList>givenName,sn,displayName,mailNickname,msRTCSIPPrimaryUserAddress,telephoneNumber,homePhone,otherHomePhone,mobile,otherMobil e,otherTelephone,ipPhone,mail,proxyAddresses,physicalDeliveryOfficeName,title ,Department,company,groupType,Description,managedBy,EntryId,abEntryHash</Retu rnList> </Metadata> </AbEntryRequest> </SearchAbEntry> </soap:Body> The successful SOAP response with the matching entry and requested attributes are as follows: <soap:Body> <SearchAbEntryResponse xmlns="DistributionListExpander"> <SearchAbEntryResult xmlns:i="http://www.w3.org/2001/XMLSchemainstance"> <Items> <AbEntry> <Attributes> <Attribute> <Name>AbEntryHash</Name> <Value>72f8f790-a0a1-b366-8671-36b7728dc31c</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>proxyaddresses</Name> <Value i:nil="true"/> <Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:string>smtp:Michele.Martin@contoso.net</b:string> <b:string>SMTP:michhart@contoso.net</b:string> </Values> </Attribute> <Attribute> <Name>department</Name> <Value>US-Parlano R&amp;D CC4</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>mail</Name> <Value>michhart@contoso.net</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>telephonenumber</Name> <Value i:nil="true"/>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 19

<Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:string>+1 (206) 555-0127</b:string> <b:string>tel:+12065550127</b:string> </Values> </Attribute> <Attribute> <Name>msrtcsip-primaryuseraddress</Name> <Value>sip:michhart@contoso.net</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>physicaldeliveryofficename</Name> <Value>30/32244</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>company</Name> <Value>CONTOSO</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>mailnickname</Name> <Value>michhart</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>title</Name> <Value>Senior Technical Writer</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>displayname</Name> <Value>Michele Martin</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>sn</Name> <Value>Martin</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>givenname</Name> <Value>Michele</Value>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 20

<Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> </Attributes> <EntryId>96233eca-a340-4665-9b12-a07990ee7f9a</EntryId> <Position>0</Position> </AbEntry> </Items> <Metadata> <MessageText i:nil="true"/> <ResponseCode>Succeeded</ResponseCode> </Metadata> </SearchAbEntryResult> </SearchAbEntryResponse> </soap:Body>

Prefix Match Search


Prefix search is invoked when a user initiates a search from the following: The main UI search box. The People picker dialog box (that can be opened, for instance, from the Conversation Window, the call forwarding dialog box, or call transfer), as illustrated in figure 6.

Figure 6. Users can initiate a contact search from this dialog box

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 21

When a prefix search is performed, the client sends a SOAP query with the search term and number of search results to be returned by the Address Book Service. Lync client shows the top 50 results whereas IP phones and Lync mobile clients show the top 20 results. The following is an example of a prefix search that Lync 2010 issued when the keyword, kencir, is entered in the search box. This request asks for up to 51 matches against all attributes listed in the SearchList attribute. It also specifies that the response should return all attributes listed in the ResultList attribute for each search result. <soap:Body> <SearchAbEntry xmlns="DistributionListExpander"> <AbEntryRequest> <BasicSearch> <SearchList>mail,mailNickname,proxyAddresses,displayName,givenName, sn,telephoneNumber,mobile,msRTCSIP-PrimaryUserAddress</SearchList> <Value>kencir</Value> <Verb>BeginsWith</Verb> </BasicSearch> <ChangeSearch xsi:nil="1"/> <Metadata> <FromDialPad>false</FromDialPad> <MaxResultNum>51</MaxResultNum> <ReturnList>givenName,sn,displayName,mailNickname,msRTCSIPPrimaryUserAddress,telephoneNumber,homePhone,otherHomePhone,mobile,otherMobil e,otherTelephone,ipPhone,mail,proxyAddresses,physicalDeliveryOfficeName,title ,Department,company,groupType,Description,managedBy,EntryId,abEntryHash</Retu rnList> </Metadata> </AbEntryRequest> </SearchAbEntry> </soap:Body> This request results in the following successful SOAP HTTP response with the matching entries and requested attributes: <soap:Body> <SearchAbEntryResponse xmlns="DistributionListExpander"> <SearchAbEntryResult xmlns:i="http://www.w3.org/2001/XMLSchemainstance"> <Items> <AbEntry> <Attributes> <Attribute> <Name>AbEntryHash</Name> <Value>6ed3121a-bd60-12e6-6516-c79bfe28b556</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>proxyaddresses</Name> <Value i:nil="true"/>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 22

<Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:string>smtp:Ken.Circeo@contoso.net</b:string> <b:string>SMTP:kencir@contoso.net</b:string> </Values> </Attribute> <Attribute> <Name>department</Name> <Value>CTO Office</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>mail</Name> <Value>kencir@contoso.net</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>telephonenumber</Name> <Value i:nil="true"/> <Values xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> <b:string>+1 (425) 555-0118</b:string> <b:string>tel:+14255550118</b:string> </Values> </Attribute> <Attribute> <Name>msrtcsip-primaryuseraddress</Name> <Value>sip:kencir@contoso.net</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>physicaldeliveryofficename</Name> <Value>30/33111</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>company</Name> <Value>CONTOSO</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>mailnickname</Name> <Value>kavitas</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 23

<Name>title</Name> <Value>Manager</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>displayname</Name> <Value>Ken Circeo</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>sn</Name> <Value>Circeo</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> <Attribute> <Name>givenname</Name> <Value>Ken</Value> <Values i:nil="true" xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/> </Attribute> </Attributes> <EntryId>38ae9de8-9ec2-4cd1-b5e6-781659520b1c</EntryId> <Position>0</Position> </AbEntry> </Items> <Metadata> <MessageText i:nil="true"/> <ResponseCode>Succeeded</ResponseCode> </Metadata> </SearchAbEntryResult> </SearchAbEntryResponse> </soap:Body>

Local Cache
Both Lync and IP phone clients use a local cache file (located in %userprofile %\AppData\Local\Microsoft\Communicator\<sipuri>\ABS_<sipuri>.cache) to temporarily store all the information obtained from the Lync Server. Lync caches information for up to 1000 contacts and distribution groups. Similarly, IP phones cache information for up to 200 contacts and distribution groups. The client stores all the Active Directory attributes for a contact (or distribution group) in the local cache. This includes the thumbnailPhoto attribute (for instance, the client caches the photo stream for each contact). For each contact (or distribution group), there are two hash functions used to hash each attribute. This provides a way for the client to detect if information for a contact (or distribution group) has changed and to retrieve an update from AD DS. One hash function is used for the thumbnailPhoto attribute, and the second hash function is used for all other attributes associated with the contact or distribution group. Photo has its own hash key to avoid unnecessary network traffic when other contact data

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 24

for an entry changes. These hash values are generated by the Address Book Web Query service. The information stored in the cache is valid for 24 hours. During sign in and every 24 hours after sign in, the client checks the information for the contacts or distribution groups currently in use. If the Address Book Web Query service detects that the hash value provided by the client is different from what it has, it sends back the requested Active Directory attributes in the response to the client. The information in the local Address Book Server cache is indexed based on the SIP URI and all email addresses attributes for a contact (or distribution group). It is used by the client only for exact match lookups on those attributes.

Organizational Data
Organizational data is used when viewing the Organization tab on the contact card or first run auto-population of the Frequent Contacts group. Both Lync clients and IP phones always query the Address Book Service for organizational hierarchy data regardless of the value of the in-band provisioning setting, AbsUsage. The GAL download mechanism does not download and index the organizational hierarchy locally. Therefore, every time organizational data is needed, the client sends a request to the server. The following is an example of a search for the organization structure of a user: <soap:Body> <AbEntryRequest xmlns="DistributionListExpander"> <Metadata> <ReturnList>displayName,OrgHash</ReturnLi st> </Metadata> <OrgSearch> <EntryId>44961af4-de8e-4d85-9c0bd2e0a88da584</EntryId> </OrgSearch> </AbEntryRequest> </soap:Body> The successful SOAP response contains nine entries: Direct reports are listed in position, -1. In this example, two direct reports are returned. Peers are listed in position, 0. Three peers are shown in the SOAP response below. Management chain is listed in numbered positions greater than 0. Four managers in the management chain are shown in positions 1, 2, 3 and 4.

The OrgHash attribute is returned only for the entry where an EntryId was passed in the request. <soap:Body> <AbEntryResponse xmlns="DistributionListExpander"> <Items> <AbEntry> <Attributes>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 25

<Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU13</Value> </Attribute> </Attributes> <EntryId>28a6e7b3-9c97-4592-88cc-0c4805bdb68d</EntryId> <Position>-1</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU14</Value> </Attribute> </Attributes> <EntryId>969e1ded-7af5-491e-8040-ea4f4a9192c6</EntryId> <Position>-1</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU12</Value> </Attribute> </Attributes> <EntryId>a6853350-d8a6-4a1e-bae7-332b9580ccc2</EntryId> <Position>0</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU11</Value> </Attribute> </Attributes> <EntryId>03844533-b8b8-4f88-9903-7167759240a1</EntryId> <Position>0</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU10</Value> </Attribute> <Attribute> <Name>OrgHash</Name> <Value>1b320d60-7419-4c97-8c61-055b2e77ce8d</Value> </Attribute> </Attributes> <EntryId>44961af4-de8e-4d85-9c0b-d2e0a88da584</EntryId> <Position>0</Position>

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 26

</AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU6</Value> </Attribute> </Attributes> <EntryId>9d5d05e5-70a3-4291-9200-b6a2b433770e</EntryId> <Position>1</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU7</Value> </Attribute> </Attributes> <EntryId>8f73e70b-4619-45c5-a120-260fb35d755a</EntryId> <Position>2</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU8</Value> </Attribute> </Attributes> <EntryId>42a79101-9017-41c1-a264-cb64f05f980e</EntryId> <Position>3</Position> </AbEntry> <AbEntry> <Attributes> <Attribute> <Name>displayname</Name> <Value>TZ_orgSearchU9</Value> </Attribute> </Attributes> <EntryId>2b6b4bf8-84d5-4158-bb99-876e32088e1e</EntryId> <Position>4</Position> </AbEntry> </Items> <Metadata> <ResponseCode>Succeeded</ResponseCode> </Metadata> </AbEntryResponse> </soap:Body> In subsequent requests, the OrgHash can be used: <soap:Body> <AbEntryRequest xmlns="DistributionListExpander">

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 27

<Metadata> <ReturnList>displayName,OrgHash</Retu rnList> </Metadata> <OrgSearch> <EntryId>44961af4-de8e-4d85-9c0bd2e0a88da584</EntryId> <OrgHash>1b320d60-7419-4c97-8c61055b2e77ce8d</OrgHash> </OrgSearch> </AbEntryRequest> </soap:Body> If the client downloads the organizational data for a contact or distribution group, it is stored in memory with the contact or distribution group, but not in the local Address Book Server cache file. If the information is available in memory (for instance, the contact or distribution group is still in memory) then the client does not send another query for organization data to the Address Book Web Query service for another 24 hours.

Summary
The key enhancements made to the Lync people experience are: Unifying Lync contacts with Microsoft Exchange personal contacts. Users can access their Lync contacts from any client or device that connects to Microsoft Exchange. Updating the Contacts list user experience. Photos and personal status notes are prominent in the Contacts list, making it easier for users to stay connected with people they care about. In addition, the Frequent Contacts group enables users to quickly access contacts they frequently interact with. Introducing server-based search. Lync administrators have the flexibility to choose between local GAL download and server-based search to meet their organizations needs.

Additional Resources
For details about server-based search protocol documentation, see [MS-DLX]: Distribution List Expansion Protocol Specification at the MSDN Library, http://go.microsoft.com/fwlink/?LinkId=217934. For details about Lync Server, see the Microsoft Lync Server 2010 documentation, http://go.microsoft.com/fwlink/?linkid=190384.

Microsoft Lync Server 2010 Resource Kit Address Book Service

Page 28

You might also like