Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
314 views
in Technique[技术] by (71.8m points)

exchangewebservices - Exchange server version "V2_22" returned for Office 365 breaks pattern - consequences?

I just notice that talking to Office365 Exchange Web Services at https://outlook.office365.com/ews/exchange.asmx I get this in my SOAP response header:

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

This means that the Version 'schema version' property now breaks the pattern of versions that we had earlier:
Exchange2007, Exchange2007_SP1, Exchange2010, Exchange2010_SP1, Exchange2010_SP2, Exchange2013

In the schema files I found through Google (searching for <xs:simpleType name="ExchangeVersionType">) I could not find anything later than <xs:enumeration value="Exchange2013"/> (e.g. at http://msdn.microsoft.com/en-us/library/ee237685%28v=exchg.80%29.aspx)

If I do a SOAP request with this "V2_22" string, I still get valid answers.

<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>

But it now looks as if the returned Version is no longer a reliable way to determine the Exchange server version. If V2_22 is not documented anywhere, who says it will not suddenly change to V2_23 tomorrow?

Question: Does this mean I will now have to change my version detection code to look at MajorVersion and then maintain a cross reference between MajorVersion and ExchangeVersionType myself? That is horrible: another dependency to maintain is another potential code break.

[Edited to add]
This is the actual call that gives the result mentioned in the first paragraph, including the HTTP exchange:

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

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

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

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Note also that a given server supports a given contract at a point in time. The most up to date schema at this point has the following for 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>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...