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 简单类型中标识。 ExchangeVersionType 由 RequestServerVersion 元素实现。 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 中引入了以下功能:
|
Exchange 2010 SP2 | Exchange2010_SP2 | 包括 Exchange 2010 SP1 中引入的所有功能。 Exchange 2010 SP2 中引入了以下功能:
|
Exchange 2010 SP1 | Exchange2010_SP1 | 包括 Exchange 2010 中引入的所有功能。 Exchange 2010 SP1 中引入了以下功能:
|
Exchange 2010 | Exchange2010 | 包括 Exchange 2007 SP1 中引入的所有功能。 Exchange 2010 的初始发行版中引入了以下功能:
|
Exchange 2007 SP1 | Exchange2007_SP1 | 包括 Exchange 2007 中引入的所有功能。 Exchange 2007 SP1 中引入了以下功能:
|
Exchange 2007 | Exchange2007 | Exchange 2007 的初始发行版中引入了以下功能:
|
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 架构之前,将使用以下约定对架构的当前版本进行分支和重命名:
<schemaname>-<majorserverversion><servicepack>.xsd
然后,原始文件名表示最新的架构。 所有新功能都会添加到最新架构,但早期版本的架构的更新和修复除外。