目录服务代理

 

上一次修改主题: 2006-11-27

目录服务代理 (DSProxy) 是向 Microsoft Office Outlook 客户端提供通讯簿服务的 Exchange Server 2003 组件。DSProxy 是在 DSProxy.dll 中实现的,并且具有两个功能:

  • 模拟 MAPI 通讯簿服务,并将请求转发给 Active Directory 服务器。
  • 提供指引机制,使 Outlook 客户端能够直接与 Active Directory 服务器联系。

尽管从名称看 DSProxy 似乎仅仅提供代理服务,但是它实际同时提供代理服务和指引服务。

运行的 Outlook 版本早于 Outlook 2000 的 MAPI 客户端将通过 DSProxy 组件来访问目录。这些早期的客户端在设计时即假定每一台 Exchange 服务器都包含一个目录服务。在 Exchange 2000 Server 和更高版本中,情况发生了变化。因此,DSProxy 将模拟目录服务,这样早期的客户端即可通过使 Exchange 2003 服务器将请求转发至 Active Directory 来访问目录。

Outlook 的后续版本(例如,Outlook 2000 和 Outlook 2002)在与 Exchange Server 进行初始连接时仍然使用名称服务提供程序接口 (NSPI) 代理。但是,客户端与服务器联系之后,DSProxy 服务会将引用传递回客户端。从这点开始,所有未来的目录请求都将直接发送到引用服务器。在这种情况下,引用服务器是全局编录服务器。

note注意:
在 Outlook 2000 的原始版本中,只有当全局编录服务器变得无法访问时,才会刷新引用。在 Outlook 2000 Service Release 2 (SR2) 中,将于每次 Outlook 启动时刷新引用。此更改可以防止 Outlook 2000 继续绑定到不合适的全局编录服务器。Outlook 2002 和更高版本将在客户端重新启动或出现错误时,更新其全局编录引用。

DSProxy 从 DSAccess 中获取它工作的全局编录服务器列表,但是不通过 DSAccess 路由其查询。这是因为 DSProxy 使用 NSPI 来提交 MAPI 通讯簿查找。DSAccess 仅仅处理 LDAP 查询。但是,DSProxy 完全依赖于 DSAccess 来提供全局编录故障转移支持。

DSProxy 可以执行下列操作。

  • 它从 DSAccess 获取工作的全局编录列表,并筛选出不适当的全局编录。
  • 它基于全局编录的个数及客户端 IP,将运行早于 Outlook 2000 的客户端的 MAPI 查询转发至全局编录服务器。
  • 它使用轮循机制,将 Outlook 2000 和更高版本客户端指引到全局编录服务器。

DSProxy 最初作为一个单线程运行,最多可以支持 512 个客户端连接。DSProxy 自动为每 512 个连接产生一个额外的线程。与 DSAccess 不同,DSProxy 没有缓存机制。这意味着每一个通过 DSProxy 处理的 MAPI 查询都发送到工作的全局编录。

在 Exchange Server 2003 Service Pack 2 (SP2) 中,对 DSProxy 服务引用全局编录中 Outlook 客户端的方式在设计上进行了更改。本主题说明该更改前后对行为的影响。

在 Exchange Server 2003 SP2 之前,Outlook MAPI 客户端会接收对全局编录服务器的引用,或使用 Exchange 服务器发送目录相关的请求。在客户端运行的是 Outlook 2000 的情况下,Outlook 客户端连接到 Exchange 服务器之后,DSProxy 服务会将引用传递回该客户端。从这点开始,所有未来的目录请求将直接发送至被引用的全局编录服务器。

在这种情况下,全局编录位于以下两个位置之一:

  • 全局编录所在的 Active Directory 站点与 Exchange 服务器相同(典型行为)。
  • 全局编录所在的 Active Directory 站点直接连接至 Exchange 服务器的 Active Directory 站点(所有站点内全局编录不可用的情况下)。

除了优先考虑站点成员外,DSProxy 还将优先使用与 Exchange 服务器属于同一域成员的全局编录服务器。如果没有符合条件的全局编录服务器,DSProxy 将使用 Active Directory 站点中的其它全局编录服务器。

此行为在对域运行了 DomainPrep 的多域环境中存在问题。特别是,如果 Outlook 客户端指向的全局编录服务器不在已启用邮箱的用户的同一域,则该用户将只能以只读格式访问数据。这意味着将无法更新某些对象。更新可以是对已启用邮箱的用户的更新(如委派访问或通讯组成员身份)。

目录林包含三个为 Exchange Server 准备的域。所有用户和通讯组位于 UserDomain 域中。来自 UserDomain 和 ThirdDomain 的全局编录服务器是 Exchange 服务器的 Active Directory 站点的成员。Outlook 客户端位于不同的 Active Directory 站点。在 Exchange 服务器的 Active Directory 站点中,没有发现 Exchange 服务器的域,也没有该域的全局编录服务器。

DSProxy 引用过程 - SP2 之前

假定在 Exchange 服务器的 Active Directory 站点,三个全局编录服务器中有一个或多个处于联机状态且可访问,则 Outlook 2003 客户端连接到 Exchange 服务器时,DSProxy 可能会将客户端指向该站点中的任何一个全局编录服务器。因为没有属于 Exchange 服务器的域成员的全局编录服务器,因此 SP2 之前的行为对于使用哪个全局编录服务器并不具有倾向性。DSProxy 将在可用的全局编录服务器之间平衡引用请求的负载,以便平均分配客户端。

基于上述设计,DSProxy 会有 66% 的可能性将 Outlook 客户端指向客户端主域之外的全局编录服务器。出于讨论的目的,假定 DSProxy 将客户端指向 ThirdDomain 全局编录服务器。在这种情况下,除下列请求外,Outlook 客户端可以成功的使用此全局编录服务器处理所有目录请求:

  • 更新位于 UserDomain 中的通讯组的成员身份。
  • 将委派权限分配给位于 UserDomain 中的通讯组的邮箱。
  • 使用 Outlook 中的“发布到全球通讯簿”选项将证书发布到全球通讯簿列表 (GAL)。

如果 DSProxy 将 Outlook 客户端指向 UserDomain GC1,则 Outlook 客户端可以执行以上所列请求。

有关 SP2 之前的行为及其潜在问题的更多信息,请参阅以下 Microsoft 知识库文章。

在 Exchange Server 2003 SP2 中,通过使用新算法,引用过程现在将尝试为 Outlook 客户端提供与已启用邮箱的用户属于同一域的全局编录。如果存在主域全局编录服务器,并且邮件收件人可以通过 Exchange 服务器访问此全局编录服务器,则新算法将可解决委派问题。如果通讯组与邮箱位于相同的域,则新算法可以解决通讯组问题。如果通讯组与邮箱位于不同的域,则无法解决此问题,因为全局编录包含的通讯组为只读副本。

Exchange Server 2003 SP2 DSProxy 服务尝试将 Outlook 客户端指向满足以下条件的可用全局编录服务器:支持客户端使用的协议且位于邮箱所有者的 Active Directory 主域。为了使 DSProxy 找到满足这些要求的全局编录服务器,DSProxy 将基于以下约束对特定全局编录服务器的适用性进行评分:

  • 约束 1 全局编录可用 (RPC ping) – 16 分
  • 约束 2 全局编录支持客户端的协议 – 8 分
  • 约束 3 全局编录属于用户的域 – 4 分
  • 约束 4 全局编录与 Exchange 服务器位于同一 Active Directory 站点 – 2 分
  • 约束 5 全局编录是 Exchange 服务器当前正在使用的全局编录之一 – 1 分

DSProxy 首先分配得分最高的全局编录服务器,如果得分相同,则按顺序分配资源。

约束 1 每五分钟计算一次,可通过更改“LdapKeepAliveSecs”注册表项对其进行配置。由于在客户端每次要求引用时必须计算一次约束 2 和 3,因此这两个约束是“动态”的。由于对每个全局编录仅计算一次约束 4 和 5,然后存储计算结果,因此这两个约束是“静态”的。

约束 5 也称为 Incarnation 列表。DSAccess 初始化时,它建立一个 Incarnation 列表,其中包含 DASccess 可用的 10 个站点内全局编录服务器。如果所有站点内全局编录服务器皆不可用,DSAccess 将另建立一个 Incarnation 列表,其中包含 10 个来自直接连接的站点(从站点链接成本最低的站点开始)的站点外服务器。由于约束排序的原因,DSProxy 将优先使用 DSAccess 的 Incarnation 列表中的服务器,这样,在默认情况下,它将优先使用站点链接成本最低的 10 个服务器。但是,DSProxy 具有所有直接连接的站点中所有全局编录服务器的列表,并仅使用 Incarnation 列表中成员身份为服务器指定分数。

下图显示了存在 Exchange Domain 和 UserDomain 两个域时的情况。

Exchange Server 2003 SP2 DSProxy 引用过程

在这种情况下,DSProxy 服务将按如下表所示的方式为全局编录服务器指定分数。请注意,假设所有全局编录服务器在 Exchange Active Directory 站点中已启动并且能够响应。

 

服务器 Active Directory 站点 正在由 DSAccess 使用? 约束值的总分数

UserDomain GC1

Client Active Directory 站点

16+8+4=28

(1, 2, 3)

UserDomain GC2

Client Active Directory 站点

16+8+4=28

(1, 2, 3)

UserDomain GC3

Active Directory 站点 B

16+8+4=28

(1, 2, 3)

UserDomain GC4

Active Directory 站点 B

16+8+4=28

(1, 2, 3)

Exchange Domain GC1

Exchange Active Directory 站点

16+8+2+1=27

(1, 2, 4, 5)

Exchange Domain GC2

Exchange Active Directory 站点

16+8+2+1=27

(1, 2, 4, 5)

Exchange Domain GC3

Active Directory 站点 A

16+8=24

(1, 2)

Exchange Domain GC4

Active Directory 站点 A

16+8=24

(1, 2)

Exchange Domain GC5

Active Directory 站点 B

16+8=24

(1, 2)

Exchange Domain GC6

Active Directory 站点 B

16+8=24

(1, 2)

note注意:
从该表可以看到,Exchange Domain GC7 和 UserDomain GC5 未包括在其中,因为它们与 Exchange 服务器的 Active Directory 站点没有直接连接。换句话说,Exchange 服务器从不使用这些全局编录服务器来实现 DSAccess 或 DSProxy 功能。

通过该示例,可以看出此算法可能优先使用站点外全局编录服务器,而不是站点内全局编录服务器,这点与 SP2 之前 DSProxy 的典型行为不同。

在该示例中,Exchange Server 为 Outlook 客户端提供 UserDomain 全局编录服务器(按顺序使用以平衡请求负载),因为与 Exchange Domain 全局编录服务器相比,这些全局编录服务器得分更高。这意味着如果现在 Exchange 服务器的 Active Directory 站点中没有可用的邮箱主域全局编录服务器,则 Exchange 可以将用户端指向站点外全局编录服务器(但仅限那些直接与 Exchange Active Directory 站点连接的全局编录服务器)。在该特定示例中,Outlook 客户端可以接收对位于 Active Directory 站点 B 或客户端 Active Directory 站点的 UserDomain 全局编录服务器的引用。

此外,如果所有 UserDomain 全局编录服务器不可访问(即这些服务器不符合约束 1),DSProxy 就会将 Outlook 客户端指向位于 Exchange Active Directory 站点的全局编录服务器,这是因为它们的成本得分据第二位。

有关 SP2 后的 DSProxy 引用的详细信息,请参阅 Exchange Server 团队博客文章 Exchange 2003 post-SP2 DSProxy Referral Update(Exchange 2003 SP2 后 DSProxy 引用更新)。

note注意:
每篇博客文章的内容和 URL 都可能随时更改,恕不另行通知。

只有 DSProxy 可找到主域全局编录服务器时,DSProxy 引用更改才对最终用户有所帮助。如果在 Exchange 服务器的 Active Directory 站点中或任何与 Exchange 服务器直接连接的 Active Directory 站点中不存在主域全局编录服务器,则 Outlook 客户端将接收对全局编录服务器(包含已启用邮箱的用户只读副本)的引用。只读访问意味着这些有问题的邮箱将无法进行委派修改或将证书发布到 GAL。

此外,尽管新行为可以解决委派权限和证书发布问题,但无法解决邮件收件人更新通讯组成员身份的问题。要使邮件收件人可以更新成员身份,通讯组必须属于邮件收件人所在的域。如果通讯组不属于邮件收件人所在的域,则无法更新成员身份。因此,您可能仍然必须考察另一种解决方案,以使所有用户可以更新通讯组成员身份。

必须检查基础结构中的以下各项:

  • 除非预先在网络设计方面有所考虑,否则从网络角度看(延迟、带宽、使用情况及跃点数),此更改可能会导致客户端被指向不合适的全局编录服务器。建议在实施前考虑在网络方面可能导致的问题。
  • 要确保 Exchange Server 继续提供站点内全局编录引用,可能需要为包含邮箱(位于 Active Directory 站点的 Exchange 服务器)的域向 Exchange Active Directory 站点添加全局编录服务器。
 
显示: