Версия сервера Exchange "V2_22" возвращена для шаблона разрывов Office 365 - последствия?
Я просто заметил, что, общаясь с веб-службами Office365 Exchange по адресу https://outlook.office365.com/ews/exchange.asmx я получаю это в своем заголовке ответа SOAP:
<Envelope>
<Header>
<ServerVersionInfo MajorVersion="15" MinorVersion="0" MajorBuildNumber="1049" MinorBuildNumber="23" Version="V2_22"/>
</Header>
Это означает, что свойство Version версии схемы теперь нарушает шаблон версий, которые у нас были ранее:
Exchange2007, Exchange2007_SP1, Exchange2010, Exchange2010_SP1, Exchange2010_SP2, Exchange2013
В файлах схемы, которые я нашел через Google (поиск <xs:simpleType name="ExchangeVersionType">
) Я не смог найти ничего позже, чем <xs:enumeration value="Exchange2013"/>
(например, по адресу http://msdn.microsoft.com/en-us/library/ee237685%28v=exchg.80%29.aspx)
Если я сделаю запрос SOAP с этой строкой "V2_22", я все равно получу правильные ответы.
<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]"
3 ответа
Шаблон версии схемы не изменился для Office 365 EWS. Вернулась версия схемы "Exchange2013_SP1", и я только что подтвердил ее, перейдя по https://outlook.office365.com/ews/messages.xsd ссылается WSDL (строчка, на которую я ссылаюсь, приведена ниже).
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, эта же версия должна быть включена в ответ в качестве значения "Версия". Мы работаем, чтобы исправить это. Спасибо за сообщение об этой проблеме!
Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы или вам нужна дополнительная информация.
Спасибо,
Venkat
Также обратите внимание, что данный сервер поддерживает данный контракт в определенный момент времени. Самая современная схема на данный момент имеет следующее для 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>
Предыдущее поведение и то, что должно быть текущим поведением, состоит в том, что ServerVersionInfo возвращает как номер сборки, так и максимально поддерживаемый ExchangeVersionType сервера. Это значение не отражает версию, в которой было возвращено тело ответа SOAP. Это скорее вопрос возможностей. Что касается этих новых странных и замечательных тегов версий, которые возвращаются, мы возвращаемся назад, как команда, чтобы обсудить их - да, они реальны, но, очевидно, как указывалось некоторыми выше, между схемой, на которую они ссылаются, может возникнуть разрыв и другие подобные вещи. Мы вернемся:)
К вашему сведению - я исправил это в конце 2015 года, так что вы больше не должны видеть, что эти смешные версии вернулись. Дайте мне знать, если это не так...