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