Exchange 中的 EWS 架构版本

了解 EWS 架构、如何设计应用程序以使用它,以及每个架构版本可用的功能,以及架构与 Exchange 服务版本的关系。

EWS 架构定义可发送到 Exchange 和由 Exchange 返回的数据结构。 每个包含对 EWS 功能的重大更改的 Exchange 新版本都将包含一个新架构。 EWS 和 EWS 架构都是后向的,在某些情况下,向前兼容 - 针对早期版本 EWS 设计的应用程序在大多数情况下可与 EWS 的更高版本一起使用,如果早期版本中包含相同的功能,则面向更高版本的 EWS 的应用程序将正常工作。 本文将帮助你了解 EWS 架构的角色、架构版本控制的工作原理、架构版本和服务版本之间的关系,以及如何设计应用程序以使用 EWS 架构。

EWS 架构的角色

EWS 架构执行以下操作:

  • 定义可供客户端使用的功能集。 客户端可以使用 SOAP 自动发现服务获取支持的架构版本列表。 然后,客户端可以确定可以访问的功能,因为每个架构版本都表示 一个 EWS 功能集。 为 EWS 发布的每个新架构都包含以前版本的架构实体以及任何新功能的架构定义。 这样,EWS 支持面向早期版本 EWS 的应用程序。

  • 提供 API 协定的一般说明。 可以使用此协定来确定可以发送到 Exchange 和从 Exchange 接收的数据结构。

  • 提供用于发送请求的版本控制机制。 Exchange 服务器在其虚拟目录中包含所有受支持的 EWS 架构版本。

设计应用程序时考虑架构版本

在设计应用程序以使用不同版本的 EWS 架构时,请记住以下几点:

  • 根据架构版本打开/关闭功能。 你需要将客户端功能映射到架构版本,在某些情况下,映射到服务版本。 以下示例将基于架构和服务的版本返回 PropertySet

    private static PropertySet InitPropertySetByVersion(ExchangeService service)
    {
        PropertySet props;
        // The schema version to target to access the NormalizedBody property 
        // is Exchange2013 or later. The server version to target to access the 
        // NormalizedBody property on an email is 15 or later, which 
        // equates to Exchange 2013.
        if (service.RequestedServerVersion >= ExchangeVersion.Exchange2013 &&
            service.ServerInfo.MajorVersion >= 15)
        {
            props = new PropertySet(EmailMessageSchema.NormalizedBody);
        }
        else
        {
            props = new PropertySet(EmailMessageSchema.Body);
        }
        return props;
    }
    
  • 使用支持要使用的功能的最早 EWS 架构版本对请求进行版本控制。 这将使客户端适用于更多潜在的 Exchange 服务器。 如果开发业务线应用程序仅面向组织的服务器,则这一点不太重要,但如果要为更广泛的 Exchange 受众构建应用程序,则这一点非常重要。

按架构版本排序的功能

客户端可用的架构版本在位于 type.xsd 架构中的 ExchangeVersionType 简单类型中标识。 ExchangeVersionTypeRequestServerVersion 元素实现。 RequestServerVersion 元素在所有 EWS 请求中发送,以指示客户端所面向的架构版本。 这反过来又标识可供客户端使用的功能集。

表 1:按产品和架构版本分列的 EWS 功能

产品版本 关联的架构版本 功能
Exchange Online 最新架构版本。 除了为联机客户端添加的任何新功能外,还包括当前版本的 Exchange 中的所有功能。
Exchange 2013 SP1 Exchange2013_SP1 包括 Exchange 2013 中的所有功能。

Exchange 2013 SP1 中引入了以下功能:
Exchange 2013 Exchange2013 包括 Exchange 2007 和 Exchange 2010 中引入的所有功能。

Exchange 2013 中引入了以下功能:
  • 存档
  • 电子数据展示
  • Personas
  • 保留策略
  • 统一联系人存储
  • 用户照片
Exchange 2010 SP2 Exchange2010_SP2 包括 Exchange 2010 SP1 中引入的所有功能。

Exchange 2010 SP2 中引入了以下功能:
  • 获取密码过期时间
  • DateTime 精度
  • 更新了联系人的属性标识符
  • 新的模拟方案
Exchange 2010 SP1 Exchange2010_SP1 包括 Exchange 2010 中引入的所有功能。

Exchange 2010 SP1 中引入了以下功能:
  • 创建、检索和修改收件箱规则
  • 以编程方式访问存档邮箱
  • 对话操作
  • 防火墙遍历通知
  • 改进的管理功能
  • 改进了混合版本支持
  • 限制保护支持
  • 控制应用程序对 EWS 的访问
  • 客户端证书身份验证支持
Exchange 2010 Exchange2010 包括 Exchange 2007 SP1 中引入的所有功能。

Exchange 2010 的初始发行版中引入了以下功能:
  • 完整专用通讯组列表
  • 用户配置对象
  • 文件夹关联的项目
  • 邮件跟踪
  • 统一消息
  • SOAP 自动发现
  • 增强的时区支持
  • 会议室资源可用性信息
  • 索引搜索
  • 转储访问
  • 邮件提示信息
Exchange 2007 SP1 Exchange2007_SP1 包括 Exchange 2007 中引入的所有功能。

Exchange 2007 SP1 中引入了以下功能:
  • 委托管理
  • 文件夹权限
  • 公用文件夹
  • 发布项目
  • ID 转换
Exchange 2007 Exchange2007 Exchange 2007 的初始发行版中引入了以下功能:
  • 对项目、文件夹和附件的完全访问权限 (创建、获取、更新、删除)
  • 可用性
  • 外出设置
  • 通知
  • 同步
  • 名称解析
  • DL) 扩展 (通讯组列表
  • 搜索

EWS 架构和服务版本之间的关系

EWS 架构版本与服务器正在运行的 EWS 服务版本相关。 EWS 架构的命名模式与 Exchange 的本地版本相关。 例如,Exchange 2013 的初始版本服务版本为 15.00.0516.032,架构名称 为 Exchange2013。 由于 Exchange 2013 的架构已更新,因此服务版本为 15.00.0516.032 及更高版本的 Exchange 2013 和 Exchange Online对于最新架构具有相同的版本名称。 在早期版本的 Exchange 中,EWS 架构未使用累积更新更新 (以前称为汇总) 。 但是,由于 Exchange 更新频率更高,以支持Exchange Online,因此累积更新现在包含 EWS 的架构更新。 架构文件名和关联的架构版本名称仅随本地 Exchange 的 Service Pack 或主要版本一起更新。

虽然 EWS 架构定义了协定,但在某些情况下,服务版本是客户端确定应如何与服务交互的唯一方法。 架构中未反映的服务行为更改只能由所有 EWS 响应中返回的服务版本确定。 例如,在 Exchange 2013 中重新设计 公用文件夹 时,用于移动和复制公用文件夹的操作已更改。 如果将客户端设计为在 Exchange 2010 中复制公用文件夹,则需要更新它以使用不同的操作在 Exchange 2013 中获取相同的结果。

EWS 架构的更新方式

从 Exchange 2007 开始运行 Exchange 版本的 Exchange 服务器在托管 EWS 服务的虚拟目录中包含 EWS 架构。 当前架构版本始终由 types.xsd 和 messages.xsd 文件表示。 图 1 显示了在开发新版本架构时如何对 messages.xsd 架构进行分支。 在添加新功能之前,将包含原始 messages.xsd 架构的副本并将其重命名为表示架构的以前版本。 然后,使用新版本的服务说明更新 messages.xsd 文件。

图 1. EWS 架构的更新方式

显示如何更新 EWS 架构的示意图。分离最新的架构版本,以便对之前版本重命名,且最新文件名显示当前版本。

在更新新版本的 EWS 架构之前,将使用以下约定对架构的当前版本进行分支和重命名:

<schemaname>-<majorserverversion><servicepack>.xsd

然后,原始文件名表示最新的架构。 所有新功能都会添加到最新架构,但早期版本的架构的更新和修复除外。

另请参阅