Microsoft Exchange Server 2003 系统助理使用OABGen.dll 来生成脱机地址簿。OABGen 是一个MAPI应用程序,它使用名称服务提供程序接口(NSPI)调用来从活动目录目录服务读取信息。对于脱机地址簿的生成到正常工作,一个健康和正确配置的活动目录是必须的组件。

  组成这些列表的地址列表和对象以外,脱机地址簿也有自己的目录属性。活动目录有问题会导致脱机地址簿出现问题。例如,活动目录复制的中断或失败会阻止新增加的目录对象出现在脱机地址簿中。

  几个Exchange 服务器组件和活动目录一起工作来生成和维护脱机地址簿。在脱机地址簿被创建后(被Exchange 安装自动创建或被有管理员使用Exchange System Manager 手动创建),Exchange 服务器和活动目录一起工作来维护脱机地址簿,从而与目录中的更改保持同步。

  在脱机地址簿生成以后,它们位于公用文件夹中的系统文件夹中。您能够使用像MFCMapi 或者Exchange System Manager 来查看这些系统文件夹。

  活动目录问题和OAB生成过程

  活动目录问题能导致OAB出现问题。例如,一个Windows 账号和关联的Exchange 邮箱被创建。有几个全局编录服务器在环境中。在这个例子中,全局编录服务器之间的活动目录复制被中断因为维护操作。Exchange 服务器在产生脱机地址簿时连接到一个不含有最新账号信息的全局编录服务器。因此,该新账号不会显示在OAB中。

  Exchange 组件回顾

  下面这些组件可能会涉及到当您在解决OAB问题的时候:

  Exchange Store 负责存储脱机地址簿下直接列出的脱机通讯簿系统文件夹。每次新建脱机通讯簿时,会在夜间联机维护的过程中创建相应的脱机通讯簿系统文件夹,包括容器(如 EX:/o=<组织名称>/ou=<管理组> 和 /o=<组织名称>/cn=addrlists/cn=oabs/cn=<脱机地址列表的名称>)。您能够使用像 OABInteg、MFCMapi和Exchange System Manager 来查看这些邮件和附件。

  目录服务器 在脱机通讯簿的生成中会使用 Active Directory 服务器。脱机通讯簿配置数据存储在 Active Directory 中的“配置命名上下文”分区中,这使其可用于所有的域控制器。此外,全局地址列表信息存储在全局编录服务器中。

  收件人更新服务 虽然脱机通讯簿的生成无需使用收件人更新服务,但是地址列表会需要此组件。系统助理会调用收件人更新服务,该服务又会维护收件人的地址列表成员身份。如果地址列表为空,则脱机通讯簿的生成将失败。

  系统助理 系统助理会调用 Oabgen.dll来进入该步骤。

  OABGen.dll OABGen 是一个MAPI应用程序,它使用NSPI调用来从活动目录中查询地址列表信息。初次创建脱机通讯簿时,OABGen 会创建 OAB 版本 2、OAB 版本 3a 文件夹。

  每次运行 OABGen 时,它都会执行一些任务:

  · 为所有的脱机地址簿版本创建文件

  · 它整理和压缩文件

  · 它在系统文件夹中会为其经配置要生成的每个版本的脱机通讯簿创建公告。脱机通讯簿文件将保存为文件夹中公告上的附件。

  · 它创建包含日常更改的增量脱机通讯簿文件。Exchange Server 2003 中的默认设置为每天凌晨 5:00 生成脱机通讯簿增量文件。

  OAB生成过程

  Exchange Server 2003 生成下面两种Microsoft Office Outlook 2003 脱机地址簿:

  Unicode 脱机地址簿 (OAB Version 3) 该脱机地址簿对Exchange Server 2003来说是新的,它有其他的信息,能够帮助Microsoft Outlook 减少远程过程调用(RPCs)。此外,Unicode的脱机地址簿有新的特性,能够允许Outlook为脱机地址簿的语言区域使用正确的排序规则。

  American National Standards Institute (ANSI) 脱机地址簿 Exchange Server 5.5和2000服务器使用该该脱机地址簿格式。Exchange Server 2003 也支持ANSI脱机地址簿。对于ANSI脱机地址簿来说有一些已知的问题,尤其对那些脱机地址簿有多个排序区域。

  通过Exchange System Manager 或者在一个指定时间表内,一个地址列表能够被创建。系统助理直接调用OABGen.dll ,然后传递关于要创建OAB的信息。下面的步骤描述了该过程。

  1. 在系统助理调用OABGen.dll 后,获得模板信息,两个模板文件被写好。对Exchange 服务器支持的每种客户端语言,两个相关的文件被创建(一个将以Windows 格式(lngXXX.oab)另外一个将以Macintosh格式(macXXX.oab))

  2. 在系统助理完成模板文件处理后,它使用NSPI从活动目录中查询地址列表信息,并读出所有的地址列表条目。

  3. 在查询结束的时候,系统助理处理该数据并将它写出到磁盘上的临时位置(系统临时目录)。

  4. 该过程最后的步骤是压缩这些邮件附件(Browse.Oab, Details.Oab, Anrdex.Oab, Rdndex.Oab, 和一个模板文件Tmplts.Oab),然后将它们发布到各自的OAB系统文件夹中。

  5. 在这个时候,OAD文件已经准备好让客户端去下载。

  注意:只有Exchange 管理员通过访问来更改或者修改地址或显示模板,这些文件包含的数据才能够更改。

  包含OAB数据的单个文件

  在客户端侧,包含OAB数据的单个文件位于C:\Documents and Settings\UserName\Local Settings\Application Data\Microsoft\Outlook。

  Anrdex.oab 该文件是一个索引,用来解析模糊名称。

  Browse.oab 这是一个核心文件。该文件包含每个对象的对象类型、显示名称和Details.oab 文件中的指针

  Details.oab 该文件包含所有的对象的详细信息(那些被包含在脱机地址簿的生成过程中),除了显示名称。

  Pdndex.oab 该文件包含对域名的更改和它的列表。

  Rdndex.oab 该文件是一个索引,用来解析相对可分辨名称。

  Tmplts.oab 该文件包含对话框和脱机地址簿中任何其他静态条目字符串,该文件不会增加如果您增加其他对象到您的目录中。

  此外,有六个Unicode 的文件类型:

  Uanrdex.oab 该文件是Anrdex.oab 文件的Unicode 版本。

  Ubrowse.oab 该文件是Browse.oab文件的Unicode 版本。

  Udetails.oab 该文件是Details.oab文件的Unicode 版本。

  Updndex.oab 该文件是Pdndex.oab文件的Unicode 版本。

  Urdndex.oab 该文件是Rdndex.oab文件的Unicode 版本。

  Utmplts.oab 该文件是Tmplts.oab文件的Unicode 版本。

  脱机地址列表必须的属性

  下面这些属性对于脱机地址列表来说是必须的:

  addressBookRoots Exchange 使用该属性来配置地址簿容器树来显示在MAPI地址簿中。该属性能够在the Exchange Config 对象的属性中找到,它列出了地址簿容器树的所有根。

  offlineABContainers 该属性是一个多值可分辨名称属性,它存储了地址列表的可分辨名称的一个列表,该地址列表应该包含在这个脱机地址簿中。

  offlineABServer 该属性是一个单值可分辨名称属性,它存储了代表生成该脱机地址簿服务器的可分辨名称。该服务器必须运行Exchange 2000 Server 。

  doOABVersion 该属性是一个单值整数属性,它存储了该指定地址簿和不同版本的Exchange 服务器之间的兼容性信息。该属性能够被设置为0或1。任何其他的值被保留以便将来使用。数值0表示该地址簿不需要兼容Exchange Server 4.0 和Exchange Server 5.0。数值1表示该地址簿应该兼容Exchange Server 4.0 和Exchange Server 5.0,除了Exchange Server 5.5 和 Exchange 2000 Server。

  msExchOABFolder 该属性是一个单值八位字符属性,它总是被设置为一个变量数组和一个存储0字节数组的元素。它存在只是因为旧版本的Exchange 服务器。

  offlineABSchedule 该属性是一个单值八位字符属性。它被设置为一个大小为84的字节数组,它存储脱机地址簿更新间隔时间表。该结构中的每位表示15分钟的增量,从星期天上午 12:00开始。该结构中的每个字节表示2小时的增量。设置为 " 1 " 用来安排它以 15 分钟的间隔来运行。

  offlineABStyle 该属性值是一个单值整数属性,它表示更多的一般的Exchange 服务器日程信息,如下:

  · 0= 从不运行。 这与设置offlineABSchedule属性中的计划点中的每个字节为0x00是一样的。

  · 1= 以存储在offlineABSchedule属性中的计划点指定的来运行。

  · 2= 总是运行。这与设置offlineABSchedule属性中的计划点中的每个字节为0xFF是一样的。

  legacyExchangeDN 该属性是一个单值可分辨名称属性,它存储了该地址列表属于的Exchange 组织的legacyExchangeDN 属性。Exchange System Manager 以<组织的旧域名>/cn=addrlists/cn=oabs/cn=<脱机地址簿的旧容器名称>的格式来创建它。

  msExchOABDefault 该属性是一个单值布尔属性,它存储的值为True或False。如果设置为Ture,它表示对于没有为该储存显式指定的任何邮箱存储而言,该脱机地址列表是缺省的脱机地址列表。应该只有一个脱机地址簿将该值设置为True。

  systemFlags 该属性值是一个单值整数属性,它存储了关于目录对象的系统信息。尽管该属性是可选的,它必须在创建的时候设置。该属性通过传递一个值来设置,该值由 ADS_SYSTEMFLAG_ENUM 枚举来定义。有关ADS_SYSTEMFLAG_ENUM的信息,您可以参考MSDN 。

  siteFolderGUID 该属性是一个单值八位字符属性,为脱机地址簿,它被设置为一个随机的唯一全局唯一标识符 (GUID) 值。

  siteFolderServer 该属性是一个单值可分辨名称属性,它存储脱机地址簿位于的公用文件夹存储的可分辨名称。该公用文件夹存储应该和offLineABServer 在同一台服务器上,以避免网络流量。

  msExchPurportedSearcyUIArray 该属性是一个多值属性,它存储必要的参数来为该脱机地址簿重建Exchange System Manager的脱机地址簿查询筛选器。该属性没有必要设置。如果它没有设置的话,当通过Exchange System Manager 查看的时候,脱机地址簿属性上的修改按钮将被禁用。修改该属性是不被支持的,也没有如何自定义该属性的文档。最佳方法是以编程的方式自定义它,从 Exchange System Manager使用类似的查询筛选器创建一个脱机地址簿,拷贝该属性的值,把他们粘贴到您的代码中,来生成您通过编程方式来创建的新脱机地址簿。