【问题标题】:Exchange server version "V2_22" returned for Office 365 breaks pattern - consequences?为 Office 365 返回的 Exchange 服务器版本“V2_22”打破了模式 - 后果?
【发布时间】:2014-10-16 12:13:03
【问题描述】:

我只是注意到在https://outlook.office365.com/ews/exchange.asmx 与 Office365 Exchange Web 服务交谈时,我在我的 SOAP 响应标头中得到了这个:

<Envelope>
  <Header>
    <ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="1049" MinorBuildNumber="23" Version="V2_22"/>
  </Header>

这意味着Version 'schema version' property 现在打破了我们之前的版本模式:
Exchange2007、Exchange2007_SP1、Exchange2010、Exchange2010_SP1、Exchange2010_SP2、Exchange2013

在我通过 Google 找到的架构文件中(搜索 &lt;xs:simpleType name="ExchangeVersionType"&gt;)我找不到任何迟于 &lt;xs:enumeration value="Exchange2013"/&gt;(例如http://msdn.microsoft.com/en-us/library/ee237685%28v=exchg.80%29.aspx

如果我使用此“V2_22”字符串执行 SOAP 请求,我仍然会得到有效的答案。

<soapenv:Envelope 
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" 
  xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">
   <soapenv:Header>
      <typ:RequestServerVersion Version="V2_22"/>
   </soapenv:Header>

但现在看起来返回的版本不再是确定 Exchange 服务器版本的可靠方法。如果 V2_22 没有在任何地方记录,谁说它明天不会突然变成 V2_23?

问题:这是否意味着我现在必须更改我的版本检测代码以查看 MajorVersion,然后维护 MajorVersion 和 ExchangeVersionType 我自己之间的交叉引用?这太可怕了:要维护的另一个依赖项是另一个潜在的代码中断。

[编辑添加]
这是给出第一段中提到的结果的实际调用,包括 HTTP 交换:

>> "POST /ews/exchange.asmx HTTP/1.1[\r][\n]"
>> "Accept-Encoding: gzip,deflate[\r][\n]"
>> "SOAPAction: "http://schemas.microsoft.com/exchange/services/2006/messages/ResolveNames"[\r][\n]"
>> "Content-Type: text/xml; charset=utf-8[\r][\n]"
>> "Content-Length: 610[\r][\n]"
>> "Host: outlook.office365.com[\r][\n]"
>> "Connection: Keep-Alive[\r][\n]"
>> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]"
>> "[\r][\n]"
>> "<soapenv:Envelope [\n]"
>> "  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" [\n]"
>> "  xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" [\n]"
>> "  xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">[\n]"
>> "   <soapenv:Header>[\n]"
>> "      <typ:RequestServerVersion Version="Exchange2007_SP1"/>[\n]"       OR: Exchange2013_SP1
>> "   </soapenv:Header>[\n]"
>> "   <soapenv:Body>[\n]"
>> "    <!-- mes:ResolveNames ReturnFullContactData="1" SearchScope="ActiveDirectoryContacts"-->[\n]"
>> "    <mes:ResolveNames ReturnFullContactData="1">[\n]"
>> "         <mes:UnresolvedEntry>be</mes:UnresolvedEntry>[\n]"
>> "      </mes:ResolveNames>[\n]"
>> "   </soapenv:Body>[\n]"
>> "</soapenv:Envelope>"

<< "HTTP/1.1 401 Anonymous Request Disallowed[\r][\n]"
<< "Server: Microsoft-IIS/8.0[\r][\n]"
<< "request-id: 535f1eb3-294b-4036-a61a-6176ae87a60e[\r][\n]"
<< "Set-Cookie: ClientId=LZLKG0VGKSZMUMEBPSDQ; expires=Fri, 16-Oct-2015 14:42:02 GMT; path=/; HttpOnly[\r][\n]"
<< "X-Powered-By: ASP.NET[\r][\n]"
<< "X-FEServer: DB3PR01CA0057[\r][\n]"
<< "WWW-Authenticate: Basic Realm=""[\r][\n]"
<< "Date: Thu, 16 Oct 2014 14:42:02 GMT[\r][\n]"
<< "Content-Length: 0[\r][\n]"
<< "[\r][\n]"

>> "POST /ews/exchange.asmx HTTP/1.1[\r][\n]"
>> "Accept-Encoding: gzip,deflate[\r][\n]"
>> "SOAPAction: "http://schemas.microsoft.com/exchange/services/2006/messages/ResolveNames"[\r][\n]"
>> "Content-Type: text/xml; charset=utf-8[\r][\n]"
>> "Content-Length: 610[\r][\n]"
>> "Host: outlook.office365.com[\r][\n]"
>> "Connection: Keep-Alive[\r][\n]"
>> "User-Agent: Apache-HttpClient/4.1.1 (java 1.5)[\r][\n]"
>> "Cookie: ClientId=LZLKG0VGKSZMUMEBPSDQ[\r][\n]"
>> "Cookie2: $Version=1[\r][\n]"
>> "Authorization: Basic am[snip]Q==[\r][\n]"
>> "[\r][\n]"
>> "<soapenv:Envelope [\n]"
>> "  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" [\n]"
>> "  xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" [\n]"
>> "  xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">[\n]"
>> "   <soapenv:Header>[\n]"
>> "      <typ:RequestServerVersion Version="Exchange2013_SP1"/>[\n]"
>> "   </soapenv:Header>[\n]"
>> "   <soapenv:Body>[\n]"
>> "    <!-- mes:ResolveNames ReturnFullContactData="1" SearchScope="ActiveDirectoryContacts"-->[\n]"
>> "    <mes:ResolveNames ReturnFullContactData="1">[\n]"
>> "         <mes:UnresolvedEntry>be</mes:UnresolvedEntry>[\n]"
>> "      </mes:ResolveNames>[\n]"
>> "   </soapenv:Body>[\n]"
>> "</soapenv:Envelope>"

<< "HTTP/1.1 200 OK[\r][\n]"
<< "Cache-Control: private[\r][\n]"
<< "Transfer-Encoding: chunked[\r][\n]"
<< "Content-Type: text/xml; charset=utf-8[\r][\n]"
<< "Content-Encoding: gzip[\r][\n]"
<< "Vary: Accept-Encoding[\r][\n]"
<< "Server: Microsoft-IIS/8.0[\r][\n]"
<< "request-id: b1ce960a-e0d1-4545-9fe7-6711fc34f7ad[\r][\n]"
<< "X-CalculatedBETarget: db3pr02mb203.eurprd02.prod.outlook.com[\r][\n]"
<< "X-DiagInfo: DB3PR02MB203[\r][\n]"
<< "X-BEServer: DB3PR02MB203[\r][\n]"
<< "X-AspNet-Version: 4.0.30319[\r][\n]"
<< "Set-Cookie: exchangecookie=e1[snip]d01; expires=Fri, 16-Oct-2015 14:42:02 GMT; path=/; HttpOnly[\r][\n]"
<< "Set-Cookie: X-BackEndCookie2=jan@[snip].onmicrosoft.com=u56[snip]g==; expires=Sat, 15-Nov-2014 14:42:02 GMT; path=/ews; secure; HttpOnly[\r][\n]"
<< "Set-Cookie: X-BackEndCookie=jan@[snip].onmicrosoft.com=u56[snip]0=; expires=Sat, 15-Nov-2014 14:42:02 GMT; path=/ews; secure; HttpOnly[\r][\n]"
<< "X-Powered-By: ASP.NET[\r][\n]"
<< "X-FEServer: DB3PR01CA0057[\r][\n]"
<< "Date: Thu, 16 Oct 2014 14:42:02 GMT[\r][\n]"
<< "[\r][\n]"
<< "38c[\r][\n]"
<< "[0x1f][0x8b][snip][0xfc][\n]"
<< "[0xac][0x8f][snip][0x85][\n]"
<< "E{}W>[0xcb][0xda][snip][0xbc]"
<< "[\r][\n]"
<< "a[\r][\n]"
<< "t[0x4][0x13][0x3][0xc3][0xc2][0xb6][0xc6][0xb8][0x5]"
<< "[\r][\n]"
<< "b[\r][\n]"
<< "G[0xff][0xf]6'>[0x1c]I[0x8][0x0][0x0]"
<< "[\r][\n]"
<< "0[\r][\n]"
<< "[\r][\n]"

【问题讨论】:

    标签: version exchangewebservices office365


    【解决方案1】:

    还要注意,给定的服务器在某个时间点支持给定的合同。此时,最新的架构具有以下 ExchangeVersionType:

    <!-- Enumeration of Exchange Server versions -->
    <xs:simpleType name="ExchangeVersionType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Exchange2007" />
      <xs:enumeration value="Exchange2007_SP1" />
      <xs:enumeration value="Exchange2009" />
      <xs:enumeration value="Exchange2010" />
      <xs:enumeration value="Exchange2010_SP1" />
      <xs:enumeration value="Exchange2010_SP2" />
      <xs:enumeration value="Exchange2012" />
      <xs:enumeration value="Exchange2013" />
      <xs:enumeration value="Exchange2013_SP1" />
      <xs:enumeration value="Exchange2015" />
      <xs:enumeration value="Exchange2016" />
      <xs:enumeration value="V2015_10_05" />
      <xs:enumeration value="V2016_01_06" />
      <xs:enumeration value="V2016_04_13" />
      <xs:enumeration value="V2016_07_13" />
      <xs:enumeration value="V2016_10_10" />
      </xs:restriction>
    </xs:simpleType>
    

    【讨论】:

      【解决方案2】:

      Office 365 EWS 的架构版本模式没有改变。现在返回的架构版本是“Exchange2013_SP1”,我只是通过转到 WSDL 引用的https://outlook.office365.com/ews/messages.xsd 来验证它(请参阅下面我所指的行)。

      xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" version="Exchange2013_SP1" elementFormDefault="qualified" id="messages">
      

      我相信我们总是返回 ServerVersionInfo 作为附加诊断信息,以帮助调试特定构建可能存在问题的情况。但是您应该继续使用架构版本,例如Exchange2013_SP1 作为 SOAP API 版本。

      更新:我们发现了导致我们返回 V2_* 作为版本的错误。当应用请求服务器版本(例如 Exchange2013_SP1)时,应在响应中包含相同版本作为“版本”的值。我们正在努力解决这个问题。感谢您报告此问题!

      如果您有任何问题或需要更多信息,请告诉我。

      谢谢,

      文卡特

      【讨论】:

      • 但是为什么我会返回 V2_22 呢?我已将我正在执行的实际调用添加到 EWS,指定 Exchange2007_SP1 或 Exchange2013_SP1。 Here is someone who got a "V2_6"(无分辨率),其中seems to occur more often
      • 感谢您的信息。这可能是一个错误,我们正在调查它。我们为 EWS 传达架构版本的方式没有计划更改。谢谢。
      • 您好 Jan,我根据我们的调查更新了我的答案。这是一个错误,我们正在努力修复它。谢谢。
      • "应包含相同的版本。" 请注意,这将与以前的行为有所不同。我可以请求任何受支持的东西,例如Exchange2007_SP1,但服务器会报告它是什么版本。或者在线版有什么不同?
      • 嗨 Jan,行为与以前相同。如果您请求 Exchange2007_SP1,我们将返回带有该架构的响应,并将“版本”属性也设置为 Exchange2007_SP1。希望有帮助。谢谢。
      【解决方案3】:

      之前的行为和当前行为应该是 ServerVersionInfo 返回服务器的内部版本号和最大支持的 ExchangeVersionType。该值不反映返回 SOAP 响应正文的版本。它更像是一种功能。至于这些新的奇怪而美妙的版本标签正在被返回,我们正在作为一个团队重新讨论这些 - 是的,它们是真实的,但显然正如上面的一些人所指出的那样,它们所指的模式之间可能存在脱节和其他类似的东西。我们会回来的:)

      仅供参考 - 我在 2015 年底修复了这个问题,所以你应该不会再看到那些有趣的版本返回了。如果不是这样,请告诉我...

      【讨论】:

      • 当前(2016 年 3 月)在我调用它时返回:V2016_01_06。看起来它随时可能再次发生变化,我不应该再依赖它(在我的程序代码中,报告我们正在连接的服务器)。
      • 更新到之前有问题的评论stackoverflow.com/questions/36279717/…
      • 是的。从一月份开始,我们开始使用版本的构建日期。我们每季度更新一次公共架构,因此您会注意到下一个架构版本增加了大约 3 个月的时间,等等……事实上,我将在 10 月份的下周检查一个。基本上,“最新”版本是 beta 版本,并且可以包含重大更改,直到引入下一个版本。所以现在,V2016_07_13 被认为是测试版,我们仍在添加它。一旦下周滚动,我介绍 V2016_10_XX,V2016_07_13 将被锁定,不会添加任何其他功能。
      • 还要注意,给定的服务器在某个时间点支持给定的合约。此时,最新的架构具有以下 ExchangeVersionType:
      猜你喜欢
      • 2015-11-11
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      相关资源
      最近更新 更多