Web-сервисы: Сервис поиска — различия между версиями
[досмотренная версия] | [досмотренная версия] |
Porunova (обсуждение | вклад) (→Описание класса SearchParams) |
|||
(не показано 30 промежуточных версий 7 участников) | |||
Строка 1: | Строка 1: | ||
==Введение== | ==Введение== | ||
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений. | Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений. | ||
+ | |||
+ | ===Ссылка на тестовый сервис=== | ||
+ | С работой тестового [http://demo.megatec.ru/DS_Search/Search.asmx сервиса поиска] вы можете ознакомиться на нашем демо-сервере. | ||
+ | |||
==Установка== | ==Установка== | ||
− | Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ | + | Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. |
В управлении IIS необходимо создать виртуальный каталог для папки WebServices. | В управлении IIS необходимо создать виртуальный каталог для папки WebServices. | ||
===Создание виртуального каталога=== | ===Создание виртуального каталога=== | ||
Строка 24: | Строка 28: | ||
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). | В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). | ||
Строка подключения к базе данных ПК «Мастер-Тур»: | Строка подключения к базе данных ПК «Мастер-Тур»: | ||
− | *1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/> | + | *1. <add key = "connectionString" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-тур'';Initial Catalog=''название базы данных ПК Мастер-тур'';User ID=''логин пользователя ПК Мастер-тур'';Password=''пароль пользователя ПК Мастер-тур''"/> |
− | *2. <add key = "connectionStringShort" value = "Data Source= ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog= название базы данных ПК Мастер-Тур | + | *2. <add key = "connectionStringShort" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-Тур'';Initial Catalog=''название базы данных ПК Мастер-Тур''"/> |
+ | <br>При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка '''searchConnectionString''' веб-сервисом не поддерживается. | ||
+ | |||
==Настройка== | ==Настройка== | ||
− | После установки «Поисковый сервис» доступен по адресу http: //ip- адрес сервера Мастер-Веб/WebServices/Search.asmx. | + | После установки «Поисковый сервис» доступен по адресу <code><nowiki>http://ip-адрес сервера Мастер-Веб/WebServices/Search.asmx</nowiki></code>. |
+ | |||
+ | ===Настройки web.config «Поискового сервиса»=== | ||
+ | Дополнительные настройки, задаваемые в секции <code><appSettings></code> файла web.config, находящемся в папке WebServices, позволяют задать дополнительные условия для отображения и проверки данных по турам от удаленных источников. | ||
+ | {| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" | ||
+ | |||
+ | |- style="background-color:#F2F2F2" | ||
+ | |||
+ | ! width="2%" | № | ||
+ | ! width="28%" | Описание | ||
+ | ! width="35%" | Значение | ||
+ | ! width="35%" | Настройка | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 1 | ||
+ | | Отображение наличия мест в экранах, '''если релиз-период = 0''' | ||
+ | | | ||
+ | *'''true''' – отображается “запрос”, даже если в квоте еще есть свободные места; | ||
+ | *'''false''' или '''отсутствие настройки''' – отображается статус в соответствии с обычными правилами | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="setRequestIfReleaseIsZero" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 2 | ||
+ | | Проверка агентской квоты | ||
+ | | | ||
+ | *'''true''' или '''отсутствие настройки''' – квоты разделяются на агентские/общие; | ||
+ | *'''false''' – агентские квоты игнорируются, и проверяется только общая квота | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="checkAgentQuotesEnabled" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 3 | ||
+ | | Проверка общей квоты, если закончились места в агентской | ||
+ | | | ||
+ | *'''true''' или '''отсутствие настройки''' – если агентская квота закончилась, то проверяется общая квота; | ||
+ | *'''false''' – если агентская квота закончилась, общая не проверяется | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="checkAgentAndCommonQuote" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 4 | ||
+ | | Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность | ||
+ | | | ||
+ | *'''true''' или '''отсутствие настройки''' – проверять квоты без продолжительности после того, как закончатся квоты на продолжительность; | ||
+ | *'''false''' – не проверять квоты без продолжительности | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="checkNoLongQuota" value="true" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | | 5 | ||
+ | | Наличие мест, отображаемое при наступлении релиз-периода | ||
+ | | | ||
+ | *'''request''' – запрос; | ||
+ | *'''no''' – нет | ||
+ | | <syntaxhighlight lang="xml" enclose="div"> | ||
+ | <add key="expiredReleaseQuoteResult" value="request" /> | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |- style="vertical-align:text-top" | ||
+ | |} | ||
+ | |||
===Настройки web.config приложения ПК Мастер-Web=== | ===Настройки web.config приложения ПК Мастер-Web=== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
====Добавление секций==== | ====Добавление секций==== | ||
*1. В секции <ConfigSections> необходимо добавить подсекцию: | *1. В секции <ConfigSections> необходимо добавить подсекцию: | ||
+ | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="100%"><TR><TD> | ||
+ | <syntaxhighlight lang="xml"> | ||
<sectionGroup name="Megatec.Web.Services"> | <sectionGroup name="Megatec.Web.Services"> | ||
<section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/> | <section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/> | ||
</sectionGroup> | </sectionGroup> | ||
+ | </syntaxhighlight> | ||
+ | </TD></TR></TABLE> | ||
*2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию: | *2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию: | ||
+ | <span style="color:#808080">В данной секции необходимо указать адрес поискового веб-сервиса.</span> | ||
+ | <TABLE STYLE="border: 0.1em dashed #2F6FAB; margin: 8px; padding: 8px" WIDTH="100%"><TR><TD> | ||
+ | <syntaxhighlight lang="xml"> | ||
<Megatec.Web.Services> | <Megatec.Web.Services> | ||
<servicesAccessibility Enabled="true"> | <servicesAccessibility Enabled="true"> | ||
<Services> | <Services> | ||
− | <add name="DoSearch" enabled="true"/> | + | <add name="DoSearch" enabled="true" url="http://somesite/Webservices/Search.asmx"/> |
</Services> | </Services> | ||
</servicesAccessibility> | </servicesAccessibility> | ||
</Megatec.Web.Services> | </Megatec.Web.Services> | ||
+ | </syntaxhighlight> | ||
+ | </TD></TR></TABLE> | ||
+ | |||
==Подготовка данных== | ==Подготовка данных== | ||
===Описание класса SearchFilter=== | ===Описание класса SearchFilter=== | ||
+ | |||
+ | [[Файл: mb_030.png|left|Предупреждение]] <BR> | ||
+ | Параметр '''PageSize''' является ''обязательным'' и его значение должно быть менее 1000. | ||
+ | <BR><BR><BR><BR><BR> | ||
+ | Возможные значения '''HotelQuotaMask''': | ||
+ | *'''None''' - Ничего не выбрано | ||
+ | *'''Yes''' - Есть гарантированные места | ||
+ | *'''Request''' - Места под запрос | ||
+ | *'''NoFlight''' - Гарантированные места + места под запрос | ||
+ | *'''All''' - Гарантированные места + места под запрос + мест нет | ||
+ | <br> | ||
+ | Возможные значения '''AviaQuotaMask''': | ||
+ | *'''None''' - Ничего не выбрано | ||
+ | *'''Yes''' - Есть гарантированные места | ||
+ | *'''Request''' - Места под запрос | ||
+ | *'''NoFlight''' - Гарантированные места + места под запрос | ||
+ | *'''All''' - Гарантированные места + места под запрос + мест нет | ||
+ | <br> | ||
<nowiki>/// <summary> | <nowiki>/// <summary> | ||
/// Поисковый фильтр | /// Поисковый фильтр | ||
Строка 231: | Строка 284: | ||
/// <summary> | /// <summary> | ||
− | /// Поставлен ли флажок все авиакомпании | + | /// Поставлен ли флажок все авиакомпании (данный параметр еще не реализован) |
/// </summary> | /// </summary> | ||
[XmlAttribute] | [XmlAttribute] | ||
Строка 362: | Строка 415: | ||
/// <summary> | /// <summary> | ||
− | /// Ключ города прибытия | + | /// Ключ города прибытия (данный параметр еще не реализован) |
/// </summary> | /// </summary> | ||
[XmlAttribute] | [XmlAttribute] | ||
Строка 740: | Строка 793: | ||
} | } | ||
/// <summary> | /// <summary> | ||
− | /// Список | + | /// Список кодов авиакомпаний |
/// </summary> | /// </summary> | ||
− | public ArrayList | + | public ArrayList AirlineCodes |
{ | { | ||
get | get | ||
{ | { | ||
− | return this. | + | return this._airlineCodes; |
} | } | ||
} | } | ||
Строка 1000: | Строка 1053: | ||
} | } | ||
}</nowiki> | }</nowiki> | ||
+ | |||
===Описание класса SearchParams=== | ===Описание класса SearchParams=== | ||
<nowiki>/// <summary> | <nowiki>/// <summary> | ||
Строка 1014: | Строка 1068: | ||
/// <summary> | /// <summary> | ||
/// Разделять квоты на агентские/неагентские или игнорировать агентские квоты. | /// Разделять квоты на агентские/неагентские или игнорировать агентские квоты. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentQuotesEnabled". |
/// Значение по умолчанию: true. | /// Значение по умолчанию: true. | ||
/// </summary> | /// </summary> | ||
Строка 1022: | Строка 1076: | ||
/// <summary> | /// <summary> | ||
/// Проверять общую квоту, если агентская закончилась. | /// Проверять общую квоту, если агентская закончилась. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentAndCommonQuote". |
/// Значение по умолчанию: true. | /// Значение по умолчанию: true. | ||
/// </summary> | /// </summary> | ||
Строка 1032: | Строка 1086: | ||
/// иначе цены в расчет на принимается, а используется только расписание перелетов. | /// иначе цены в расчет на принимается, а используется только расписание перелетов. | ||
/// Используется только, если FindFlight = true. | /// Используется только, если FindFlight = true. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkFlightPacket". |
/// Значение по умолчанию: true. | /// Значение по умолчанию: true. | ||
/// </summary> | /// </summary> | ||
Строка 1040: | Строка 1094: | ||
/// <summary> | /// <summary> | ||
/// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность. | /// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkNoLongQuota". |
/// Значение по умолчанию: true | /// Значение по умолчанию: true | ||
/// </summary> | /// </summary> | ||
Строка 1048: | Строка 1102: | ||
/// <summary> | /// <summary> | ||
/// Проверять квоты от всех различных партнеров. | /// Проверять квоты от всех различных партнеров. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAllPartnersQuota". |
/// Значение по умолчанию: false | /// Значение по умолчанию: false | ||
/// </summary> | /// </summary> | ||
Строка 1056: | Строка 1110: | ||
/// <summary> | /// <summary> | ||
/// Результат возвращаемый, если у квоты истек релиз-период. | /// Результат возвращаемый, если у квоты истек релиз-период. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "expiredReleaseQuoteResult". |
/// Значение по умолчанию: QuotaResult.Status.Request. | /// Значение по умолчанию: QuotaResult.Status.Request. | ||
/// </summary> | /// </summary> | ||
Строка 1076: | Строка 1130: | ||
/// <summary> | /// <summary> | ||
/// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList | /// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "quotedDynamicPriceTour". |
/// Значение по умолчанию: true. | /// Значение по умолчанию: true. | ||
/// </summary> | /// </summary> | ||
Строка 1084: | Строка 1138: | ||
/// <summary> | /// <summary> | ||
/// Результат возвращаемый при наличии квоты, но отсутствии свободных мест. | /// Результат возвращаемый при наличии квоты, но отсутствии свободных мест. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "noPlacesQuoteResult". |
/// Значение по умолчанию: QuotaResult.Status.No. | /// Значение по умолчанию: QuotaResult.Status.No. | ||
/// </summary> | /// </summary> | ||
Строка 1092: | Строка 1146: | ||
/// <summary> | /// <summary> | ||
/// Тип отбора | /// Тип отбора | ||
+ | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "PagingType". | ||
/// </summary> | /// </summary> | ||
[XmlAttribute("PagingType")] | [XmlAttribute("PagingType")] | ||
Строка 1097: | Строка 1152: | ||
/// <summary> | /// <summary> | ||
− | /// | + | /// Возвращает поле, содержащее список ключей классов услуг по туру |
/// </summary> | /// </summary> | ||
[XmlAttribute("Services")] | [XmlAttribute("Services")] | ||
Строка 1104: | Строка 1159: | ||
/// <summary> | /// <summary> | ||
/// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест. | /// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест. | ||
− | /// | + | /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "setRequestIfReleaseIsZero". |
/// Значение по умолчанию: false. | /// Значение по умолчанию: false. | ||
/// </summary> | /// </summary> | ||
Строка 1122: | Строка 1177: | ||
public bool SortInDB = true; | public bool SortInDB = true; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
}</nowiki> | }</nowiki> | ||
+ | |||
===Описание класса SearchResult=== | ===Описание класса SearchResult=== | ||
<nowiki>[XmlInclude(typeof(SearchResultItem))] | <nowiki>[XmlInclude(typeof(SearchResultItem))] | ||
Строка 1616: | Строка 1667: | ||
public double DynamicHotelPriceCorrection | public double DynamicHotelPriceCorrection | ||
}</nowiki> | }</nowiki> | ||
+ | ==Работа в системе== | ||
+ | ===Использование сервиса подборов тура=== | ||
+ | |||
+ | Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами: | ||
+ | |||
+ | *SearchFilter filter – объект класса, описывающего критерии подбора тура | ||
+ | *int pageNumber – порядковый номер запрашиваемой страницы (нумерация начинается с 0) | ||
+ | *SearchParams searchParams – объект класса, описывающего параметры подбора тура | ||
+ | |||
+ | Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem. | ||
+ | |||
+ | ===Примеры запросов к сервису=== | ||
+ | |||
+ | {| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" | ||
+ | |||
+ | |- style="background-color:#F2F2F2" | ||
+ | |- style="vertical-align:text-top" | ||
+ | |||
+ | | <syntaxhighlight lang="xml"> | ||
+ | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||
+ | <soap:Body> | ||
+ | <DoSearch xmlns="http://megatec.ru/"> | ||
+ | <filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false" | ||
+ | IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false"> | ||
+ | <ExcludeTourType>false</ExcludeTourType> | ||
+ | <KindOfToursMask>All</KindOfToursMask> | ||
+ | <TurListAttributeMask>0</TurListAttributeMask> | ||
+ | <CruiseCountryKey>0</CruiseCountryKey> | ||
+ | <HotelPartnerKey>0</HotelPartnerKey> | ||
+ | <CruisePortKey>0</CruisePortKey> | ||
+ | <TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" /> | ||
+ | <PansionKeys>1</PansionKeys> | ||
+ | </filter> | ||
+ | <pageNumber>0</pageNumber> | ||
+ | <searchParams Sort="PT_Price"> | ||
+ | <CalculateVisaDeadline>false</CalculateVisaDeadline> | ||
+ | <NotDefaultSort>false</NotDefaultSort> | ||
+ | <IsShowCOName>false</IsShowCOName> | ||
+ | </searchParams> | ||
+ | </DoSearch> | ||
+ | </soap:Body> | ||
+ | </soap:Envelope> | ||
+ | </syntaxhighlight> | ||
+ | |} | ||
+ | <br /> | ||
+ | |||
+ | {| border="1" cellpadding="8" style="background-color:#F9F9F9; border:#AAAAAA; border-collapse:collapse" | ||
+ | |||
+ | |- style="background-color:#F2F2F2" | ||
+ | |- style="vertical-align:text-top" | ||
+ | | <syntaxhighlight lang="xml"> | ||
+ | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||
+ | <soap:Body> | ||
+ | <DoSearch xmlns="http://megatec.ru/"> | ||
+ | <filter CountryKey="90" ExcludeNoPlaces="false" DepartFromKey="1" IsAllHotels="true" | ||
+ | IsAllTourType="false" IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" | ||
+ | IsNullPriceMinimum="true" IsAllPansion="false"> | ||
+ | <DurationRange DurationFrom="0" DurationTo="0" /> | ||
+ | <PansionKeys> | ||
+ | <anyType xsi:type="xsd:int">1</anyType> | ||
+ | <anyType xsi:type="xsd:int">2</anyType> | ||
+ | </PansionKeys> | ||
+ | <HotelStars> | ||
+ | <anyType xsi:type="xsd:string">1*</anyType> | ||
+ | <anyType xsi:type="xsd:string">2*</anyType> | ||
+ | </HotelStars> | ||
+ | <HotelKeys> | ||
+ | <anyType xsi:type="xsd:int">1</anyType> | ||
+ | <anyType xsi:type="xsd:int">2</anyType> | ||
+ | </HotelKeys> | ||
+ | <CityKeys> | ||
+ | <anyType xsi:type="xsd:int">2</anyType> | ||
+ | <anyType xsi:type="xsd:int">3</anyType> | ||
+ | </CityKeys> | ||
+ | <ResortKeys> | ||
+ | <anyType xsi:type="xsd:int">4</anyType> | ||
+ | <anyType xsi:type="xsd:int">5</anyType> | ||
+ | </ResortKeys> | ||
+ | <ExcludeTourType>false</ExcludeTourType> | ||
+ | <KindOfToursMask>All</KindOfToursMask> | ||
+ | <TurListAttributeMask>0</TurListAttributeMask> | ||
+ | <CruiseCountryKey>0</CruiseCountryKey> | ||
+ | <HotelPartnerKey>0</HotelPartnerKey> | ||
+ | <CruisePortKey>0</CruisePortKey> | ||
+ | <TurDateRange DateFrom="2017-05-12" DateTo="2017-05-12" /> | ||
+ | <PansionKeys>1</PansionKeys> | ||
+ | </filter> | ||
+ | <pageNumber>0</pageNumber> | ||
+ | <searchParams Sort="PT_Price, pt_hdstars desc, pt_tourdate" CheckCQ="false" CheckNLQ="false"> | ||
+ | <CalculateVisaDeadline>false</CalculateVisaDeadline> | ||
+ | <NotDefaultSort>false</NotDefaultSort> | ||
+ | <IsShowCOName>false</IsShowCOName> | ||
+ | </searchParams> | ||
+ | </DoSearch> | ||
+ | </soap:Body> | ||
+ | </soap:Envelope> | ||
+ | </syntaxhighlight> | ||
+ | |} | ||
+ | <br /> | ||
− | [[Category: | + | [[Category:Web-сервисы]] |
Текущая версия на 09:36, 14 июня 2017
Введение
Данный модуль предназначен для осуществления поиска и подбора туров из внешних приложений.
Ссылка на тестовый сервис
С работой тестового сервиса поиска вы можете ознакомиться на нашем демо-сервере.
Установка
Для установки Поискового сервиса нужно создать директорию WebServices в каталоге c:/inetpub/wwwroot/ и выложить туда распакованные файлы из архива mw-megatecwebservices-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки WebServices.
Создание виртуального каталога
По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:
- 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel)
- 2. В открывшемся окне выбрать Администрирование (Administrative Tools).
- 3. Запустить Internet Information Services (IIS) Manager.
- 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties).
- 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК».
Подключение к базе данных ПК «Мастер-Тур»
В файле web.config, расположенном в папке WebServices пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). Строка подключения к базе данных ПК «Мастер-Тур»:
- 1. <add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
- 2. <add key = "connectionStringShort" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-Тур;Initial Catalog=название базы данных ПК Мастер-Тур"/>
При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка searchConnectionString веб-сервисом не поддерживается.
Настройка
После установки «Поисковый сервис» доступен по адресу http://ip-адрес сервера Мастер-Веб/WebServices/Search.asmx
.
Настройки web.config «Поискового сервиса»
Дополнительные настройки, задаваемые в секции <appSettings>
файла web.config, находящемся в папке WebServices, позволяют задать дополнительные условия для отображения и проверки данных по турам от удаленных источников.
№ | Описание | Значение | Настройка |
---|---|---|---|
1 | Отображение наличия мест в экранах, если релиз-период = 0 |
|
<add key="setRequestIfReleaseIsZero" value="true" />
|
2 | Проверка агентской квоты |
|
<add key="checkAgentQuotesEnabled" value="true" />
|
3 | Проверка общей квоты, если закончились места в агентской |
|
<add key="checkAgentAndCommonQuote" value="true" />
|
4 | Проверка квот без продолжительности после того, как заканчиваются квоты на продолжительность |
|
<add key="checkNoLongQuota" value="true" />
|
5 | Наличие мест, отображаемое при наступлении релиз-периода |
|
<add key="expiredReleaseQuoteResult" value="request" />
|
Настройки web.config приложения ПК Мастер-Web
Добавление секций
- 1. В секции <ConfigSections> необходимо добавить подсекцию:
<sectionGroup name="Megatec.Web.Services">
<section name="servicesAccessibility" type="Megatec.Configuration.WebServicesSection, Megatec.Configuration"/>
</sectionGroup>
|
- 2. На одном уровне с секцией <ConfigSections> необходимо добавить секцию:
В данной секции необходимо указать адрес поискового веб-сервиса.
<Megatec.Web.Services>
<servicesAccessibility Enabled="true">
<Services>
<add name="DoSearch" enabled="true" url="http://somesite/Webservices/Search.asmx"/>
</Services>
</servicesAccessibility>
</Megatec.Web.Services>
|
Подготовка данных
Описание класса SearchFilter
Параметр PageSize является обязательным и его значение должно быть менее 1000.
Возможные значения HotelQuotaMask:
- None - Ничего не выбрано
- Yes - Есть гарантированные места
- Request - Места под запрос
- NoFlight - Гарантированные места + места под запрос
- All - Гарантированные места + места под запрос + мест нет
Возможные значения AviaQuotaMask:
- None - Ничего не выбрано
- Yes - Есть гарантированные места
- Request - Места под запрос
- NoFlight - Гарантированные места + места под запрос
- All - Гарантированные места + места под запрос + мест нет
/// <summary> /// Поисковый фильтр /// </summary> public class SearchFilter { public enum SearchSource : short { PriceTables = 0, BindingTables = 1, } public enum KindOfTours : int { All = 0, PacketTours = 1, LandTours = 2 } /// <summary> /// Вид тура /// </summary> public KindOfTours KindOfToursMask { get { return this.kindOfTours; } set { this.kindOfTours = value; } } /// <summary> /// Маска аттрибутов тура /// </summary> public int TurListAttributeMask { get { return this.turlistAttributeMask; } set { this.turlistAttributeMask = value; } } /// <summary> /// Партнер по отелю /// </summary> public int HotelPartnerKey { get { return this.hotelPartnerKey; } set { this.hotelPartnerKey = value; } } [XmlAttribute] public int MaxChildAge { get { return this.maxChildAge; } set { this.maxChildAge = value; } } /// <summary> /// Интервал дат /// </summary> public DateInterval TurDateRange { get { return this._turDateRange; } set { this._turDateRange = value; } } /// <summary> /// Интервал продолжительностей /// </summary> public DurationInterval DurationRange { get { return this._durationRange; } set { this._durationRange = value; } } /// <summary> /// Ключ страны /// </summary> [XmlAttribute] public int CountryKey { get { if (this._countryKeys.Count == 0) return -1; return (int)this._countryKeys[0]; } set { this._countryKeys.Clear(); if (value > 0) this._countryKeys.Add(value); } } /// <summary> /// Массив ключей стран /// </summary> public ArrayList CountryKeys { get { return this._countryKeys; } } /// <summary> /// Поставлен ли флажок все авиакомпании (данный параметр еще не реализован) /// </summary> [XmlAttribute] public bool IsAllAirlines { get { return this._isAllAirlines; } set { this._isAllAirlines = value; } } /// <summary> /// Поставлен ли флажок все страны /// </summary> [XmlAttribute] public bool IsAllCountries { get { return this._isAllCountries; } set { this._isAllCountries = value; } } /// <summary> /// Поиск на все продолжительности /// </summary> [XmlAttribute] public bool IsAllDurations { get { return this._isAllDurations; } set { this._isAllDurations = value; } } /// <summary> /// Массив продолжительностей /// </summary> public ArrayList Durations { get { return durations; } } [XmlAttribute] public bool ExcludeNoPlaces { get { return excludeNoPlaces; } set { excludeNoPlaces = value; } } /// <summary> /// Массив продолжительностей в днях /// </summary> public ArrayList Days { get { return days; } } /// <summary> /// Массив продолжительностей в ночах /// </summary> public ArrayList Nights { get { return nights; } } /// <summary> /// Проверять ли квоты /// </summary> [XmlAttribute] public bool CheckQuotes { get { return checkQuotes; } set { checkQuotes = value; } } /// <summary> /// Ключ города отправления /// </summary> [XmlAttribute] public int DepartFromKey { get { if (this._departFromKeys.Count == 0) return -1; return (int)this._departFromKeys[0]; } set { this._departFromKeys.Clear(); if (value >= 0) this._departFromKeys.Add(value); } } /// <summary> /// Ключ города прибытия (данный параметр еще не реализован) /// </summary> [XmlAttribute] public int DepartToKey { get { if (this._departToKeys.Count == 0) return -1; return (int)this._departToKeys[0]; } set { this._departToKeys.Clear(); if (value > 0) this._departToKeys.Add(value); } } /// <summary> /// Массив ключей городов вылета /// </summary> public ArrayList DepartFromKeys { get { return this._departFromKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllDepartsFrom { get { return this._isAllDepartsFrom; } set { this._isAllDepartsFrom = value; } } /// <summary> /// Массив ключей городов прибытия /// </summary> public ArrayList DepartToKeys { get { return this._departToKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllDepartsTo { get { return this._isAllDepartsTo; } set { this._isAllDepartsTo = value; } } /// <summary> /// Массив ключей аэропортов вылета /// </summary> public ArrayList AirportFromKeys { get { return this._airportFromKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllAirportsFrom { get { return this._isAllAirportsFrom; } set { this._isAllAirportsFrom = value; } } /// <summary> /// Массив ключей аэропортов прибытия /// </summary> public ArrayList AirportToKeys { get { return this._airportToKeys; } } /// <summary> /// Поставлен ли флажок все города вылетов /// </summary> [XmlAttribute] public bool IsAllAirportsTo { get { return this._isAllAirportsTo; } set { this._isAllAirportsTo = value; } } /// <summary> /// Ключ отеля /// </summary> [XmlAttribute] public int HotelKey { get { if (this._hotelKeys.Count == 0) return -1; return (int)this._hotelKeys[0]; } set { this._hotelKeys.Clear(); if (value > 0) this._hotelKeys.Add(value); } } /// <summary> /// Ключ тура /// </summary> [XmlAttribute] public int TourKey { get { return this._tourKey; } set { this._tourKey = value; } } /// <summary> /// Ограничение цены /// </summary> [XmlAttribute] public double PriceLimit { get { return this._priceLimit; } set { this._priceLimit = value; } } /// <summary> /// Список ключей курортов /// </summary> public ArrayList ResortKeys { get { return this._resortKeys; } } /// <summary> /// Поставлен ли флажок все курорты /// </summary> [XmlAttribute] public bool IsAllResort { get { return this._isAllResort; } set { this._isAllResort = value; } } /// <summary> /// Список ключей городов /// </summary> public ArrayList CityKeys { get { return this._cityKeys; } } /// <summary> /// Установлен ли в фильтре флаг все города /// </summary> [XmlAttribute] public bool IsAllCity { get { return this._isAllCity; } set { this._isAllCity = value; } } /// <summary> /// Список ключей городов /// </summary> public ArrayList HotelKeys { get { return this._hotelKeys; } } /// <summary> /// Список ключей сервисов в отеле /// </summary> public ArrayList HotelOptionsKeys { get { return this._hotelOptionsKeys; } } /// <summary> /// Установлен ли в фильтре флаг все отели /// </summary> [XmlAttribute] public bool IsAllHotels { get { return this._isAllHotels; } set { this._isAllHotels = value; } } /// <summary> /// Список ключей типов туров /// </summary> public ArrayList TourTypeKeys { get { return this._tourTypeKeys; } } /// <summary> /// Установлен ли флаг все типы тура /// </summary> [XmlAttribute] public bool IsAllTourType { get { return this._isAllTourType; } set { this._isAllTourType = value; } } /// <summary> /// Список ключей типов туров /// </summary> public ArrayList TourTypeDetailKeys { get { return this._tourTypeDetailKeys; } } /// <summary> /// Установлен ли флаг все типы тура /// </summary> [XmlAttribute] public bool IsAllTourTypeDetails { get { return this._isAllTourTypeDetails; } set { this._isAllTourTypeDetails = value; } } /// <summary> /// Список звездностей отелей /// </summary> public ArrayList HotelStars { get { return this._hotelStars; } } /// <summary> /// Поиск по всем звездностям /// </summary> [XmlAttribute] public bool IsAllHotelStars { get { return this._isAllHotelStars; } set { this._isAllHotelStars = value; } } /// <summary> /// Список ключей питаний /// </summary> public ArrayList PansionKeys { get { return this._pansionKeys; } } /// <summary> /// Поиск по всем питаниях /// </summary> [XmlAttribute] public bool IsAllPansion { get { return this._isAllPansion; } set { this._isAllPansion = value; } } /// <summary> /// Список кодов авиакомпаний /// </summary> public ArrayList AirlineCodes { get { return this._airlineCodes; } } /// <summary> /// Список ключей типов номеров /// </summary> public ArrayList RoomKeys { get { return this.roomKeys; } } /// <summary> /// Список ключей категорий проживания /// </summary> public ArrayList RoomCategoryKeys { get { return this.roomCategoryKeys; } } /// <summary> /// Список ключей типов размещения /// </summary> public ArrayList AccomodationKeys { get { return this.accomodationKeys; } } /// <summary> /// Список ключей дополнительных услуг в отеле /// </summary> public ArrayList AddHotelServiceKeys { get { return this._addHotelServiceKeys; } } /// <summary> /// Поиск по все услугам в отеле /// </summary> [XmlAttribute] public bool IsAllAddHotelService { get { return this._isAllAddHotelService; } set { this._isAllAddHotelService = value; } } /// <summary> /// Искать только основные типы размещения /// </summary> [XmlAttribute] public bool MainOnly { get { return mainOnly; } set { mainOnly = value; } } /// <summary> /// Искать только туры для групп агентов, в которые входит данное агентство /// </summary> [XmlAttribute] public bool GroupOnly { get { return groupOnly; } set { groupOnly = value; } } /// <summary> /// Количество взрослых /// </summary> [XmlAttribute] public int Adults { get { return adults; } set { adults = value; } } /// <summary> /// Количество детей /// </summary> [XmlAttribute] public int Childs { get { return childs; } set { childs = value; } } /// <summary> /// Возраст первого ребенка /// </summary> [XmlAttribute] public int FirstChildAge { get { return firstChildAge; } set { firstChildAge = value; } } /// <summary> /// Возраст второго ребенка /// </summary> [XmlAttribute] public int SecondChildAge { get { return secondChildAge; } set { secondChildAge = value; } } /// <summary> /// Маска квот на проживание /// </summary> [XmlAttribute] public QuotaResult.Status HotelQuotaMask { get { return hotelQuotaMask; } set { hotelQuotaMask = value; } } /// <summary> /// Маска квот на перелет /// </summary> [XmlAttribute] public QuotaResult.Status AviaQuotaMask { get { return aviaQuotaMask; } set { aviaQuotaMask = value; } } /// <summary> /// Количество строк на странице /// </summary> [XmlAttribute] public int PageSize { get { return this.pageSize; } set { this.pageSize = value; } } /// <summary> /// Ограничение цены снизу /// </summary> [XmlAttribute] public double PriceMinimum { get { return this._priceMinimum; } set { this._priceMinimum = value; this.isNullPriceMinimum = false; } } /// <summary> /// Ограничена ли цена снизу /// </summary> [XmlAttribute] public bool IsNullPriceMinimum { get { return this.isNullPriceMinimum; } set { this.isNullPriceMinimum = value; } } /// <summary> /// Дополнительный фильтр /// </summary> [XmlAttribute] public string AddFilter { get { return addFilter; } set { addFilter = value; } } } }
Описание класса SearchParams
/// <summary> /// Класс, описывающий параметры подбора тура /// </summary> public class SearchParams { /// <summary> /// Идентификатор агенства, от имени которого производится поиск /// </summary> [XmlAttribute("Agent")] public int AgentKey = 0; /// <summary> /// Разделять квоты на агентские/неагентские или игнорировать агентские квоты. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentQuotesEnabled". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckAQ")] public bool CheckAgentQuota = true; /// <summary> /// Проверять общую квоту, если агентская закончилась. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAgentAndCommonQuote". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckCQ")] public bool CheckCommonQuota = true; /// <summary> /// При подборе перелета поиск производится в том же пакете цен, что и перелет в обсчитанном туре, /// иначе цены в расчет на принимается, а используется только расписание перелетов. /// Используется только, если FindFlight = true. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkFlightPacket". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("CheckFP")] public bool CheckFlightPacket = true; /// <summary> /// Проверять квоты без продолжительности после того, как закончатся квоты на продолжительность. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkNoLongQuota". /// Значение по умолчанию: true /// </summary> [XmlAttribute("CheckNLQ")] public bool CheckNoLongQuota = true; /// <summary> /// Проверять квоты от всех различных партнеров. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "checkAllPartnersQuota". /// Значение по умолчанию: false /// </summary> [XmlAttribute("CheckAPQ")] public bool CheckAllPartnersQuota = true; /// <summary> /// Результат возвращаемый, если у квоты истек релиз-период. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "expiredReleaseQuoteResult". /// Значение по умолчанию: QuotaResult.Status.Request. /// </summary> [XmlAttribute("ExpRelRes")] public QuotaResult.Status ExpiredReleaseResult = QuotaResult.Status.Request; /// <summary> /// Подбирать авиаперелет по туру, на который есть свободные места. /// </summary> [XmlAttribute("FindFlight")] public bool FindFlight = true; /// <summary> /// Список классов перелета (ключи бизнес- и эконом-класса) /// </summary> [XmlAttribute("FlightGroups")] public string FlightGroups = String.Empty; /// <summary> /// Использовать таблицу TP_Tours как источник данных, иначе - таблицу tbl_TurList /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "quotedDynamicPriceTour". /// Значение по умолчанию: true. /// </summary> [XmlAttribute("IsPT")] public bool IsPriceTour = true; /// <summary> /// Результат возвращаемый при наличии квоты, но отсутствии свободных мест. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "noPlacesQuoteResult". /// Значение по умолчанию: QuotaResult.Status.No. /// </summary> [XmlAttribute("NPResult")] public QuotaResult.Status NoPlacesResult = QuotaResult.Status.No; /// <summary> /// Тип отбора /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "PagingType". /// </summary> [XmlAttribute("PagingType")] public short PagingType = Megatec.Search.PagingType.Simple; /// <summary> /// Возвращает поле, содержащее список ключей классов услуг по туру /// </summary> [XmlAttribute("Services")] public bool Services = false; /// <summary> /// Отображать статус "Запрос", если релиз-период = 0, независимо от количества свободных мест. /// Не обрабатывается входным запросом. Регулируется настройкой web.config: "setRequestIfReleaseIsZero". /// Значение по умолчанию: false. /// </summary> [XmlAttribute("SetRequestOnRelease")] public bool SetRequestOnRelease = false; /// <summary> /// Параметры сортировки (выражение ORDER BY) /// </summary> [XmlAttribute("Sort")] public string Sort = string.Empty; /// <summary> /// Производить сортировку на сервере БД или на клиенте /// </summary> [XmlAttribute("SortInDB")] public bool SortInDB = true; }
Описание класса SearchResult
[XmlInclude(typeof(SearchResultItem))] public class SearchResult { /// <summary> /// Общее количество найденных записей /// </summary> [XmlAttribute("Total")] public int TotalCount /// <summary> /// Количество отобранных записей /// </summary> [XmlAttribute("Parsed")] public int ParsedCount /// <summary> /// Не используется /// </summary> [XmlAttribute("Step")] public double DynamicPriceStepValue /// <summary> /// Коллекция найденных результатов /// </summary> [XmlElement("SearchResultItem")] public List<SearchResultItem> Items }
Описание класса SearchResultItem
public class SearchResultItem: IRoomDescription { /// <summary> /// Количество основных мест /// </summary> [XmlAttribute] public int MainPlaces /// <summary> /// Количество неосновных мест /// </summary> [XmlAttribute] public int AddPlaces /// <summary> /// Основное или неосновное размещение /// </summary> [XmlAttribute] public bool IsMain /// <summary> /// Дата, до которой актуален тур /// </summary> [XmlAttribute] public DateTime TourValid /// <summary> /// Дата создания тура /// </summary> [XmlAttribute] public DateTime TourCreated /// <summary> /// Дата заезда /// </summary> [XmlAttribute] public DateTime TourDate /// <summary> /// Продолжительность тура в днях /// </summary> [XmlAttribute] public int Days /// <summary> /// Количество ночей проживания в туре /// </summary> [XmlAttribute] public int Nights /// <summary> /// Ключ страны /// </summary> [XmlAttribute] public int CountryKey /// <summary> /// Ключ города отправления /// </summary> [XmlAttribute] public int CityFromKey /// <summary> /// Ключ города прилета /// </summary> [XmlAttribute] public int CityToKey /// <summary> /// Ключ аэропорта вылета /// </summary> [XmlAttribute] public int AirportFromKey /// <summary> /// Ключ аэропорта прилета /// </summary> [XmlAttribute] public int AirportToKey /// <summary> /// Ключ расчитанного тура (TP_Tours) /// </summary> [XmlAttribute] public int TourKey /// <summary> /// Ключ типа тура (TipTur) /// </summary> [XmlAttribute] public int TourTypeKey /// <summary> /// Ключ тура из конструктора туров (turList) /// </summary> [XmlAttribute] public int TurListKey /// <summary> /// Ключ расчитанного варианта (TP_Lists) /// </summary> [XmlAttribute] public int PriceListKey /// <summary> /// Ключ цены (TP_Prices) /// </summary> [XmlAttribute] public int PriceKey /// <summary> /// Цена /// </summary> [XmlAttribute] public decimal Price /// <summary> /// Ключ главного отеля /// </summary> [XmlAttribute] public int HotelKey /// <summary> /// Ключ партнера для главного отеля /// </summary> [XmlAttribute] public int HotelPartnerKey /// <summary> /// Ключ курорта главного отеля /// </summary> [XmlAttribute] public int ResortKey /// <summary> /// Ключ города главного отеля /// </summary> [XmlAttribute] public int CityKey /// <summary> /// Звездность главного отеля /// </summary> [XmlAttribute] public string HotelCategory /// <summary> /// Ключ питания главного отеля /// </summary> [XmlAttribute] public int PansionKey /// <summary> /// Ключ номера в главном отеле /// </summary> [XmlAttribute] public int HotelRoomKey /// <summary> /// Ключ типа номера в главном отеле /// </summary> [XmlAttribute] public int RoomKey /// <summary> /// Ключ категории номера в главном отеле /// </summary> [XmlAttribute] public int RoomCategoryKey /// <summary> /// Ключ размещения в главном отеле /// </summary> [XmlAttribute] public int AccomodationKey /// <summary> /// Минимальный возраст первого ребенка /// </summary> [XmlAttribute] public int ChildAgeFrom /// <summary> /// Максимальный возраст первого ребенка /// </summary> [XmlAttribute] public int ChildAgeTo /// <summary> /// Минимальный возраст второго ребенка /// </summary> [XmlAttribute] public int ChildAgeFrom2 /// <summary> /// Максимальный возраст второго ребенка /// </summary> [XmlAttribute] public int ChildAgeTo2 /// <summary> /// Название отеля /// </summary> [XmlAttribute] public string HotelName /// <summary> /// Название тура /// </summary> [XmlAttribute] public string TourName /// <summary> /// Название питания /// </summary> [XmlAttribute] public string PansionName /// <summary> /// Код питания /// </summary> [XmlAttribute] public string PansionCode /// <summary> /// Название типа номера /// </summary> [XmlAttribute] public string RoomName /// <summary> /// Код типа номера /// </summary> [XmlAttribute] public string RoomCode /// <summary> /// Название категории номера /// </summary> [XmlAttribute] public string RoomCategoryName /// <summary> /// Код категории номера /// </summary> [XmlAttribute] public string RoomCategoryCode /// <summary> /// Название размещения /// </summary> [XmlAttribute] public string AccomodationName /// <summary> /// Код размещения /// </summary> [XmlAttribute] public string AccomodationCode /// <summary> /// Название курорта /// </summary> [XmlAttribute] public string ResortName /// <summary> /// Название города /// </summary> [XmlAttribute] public string CityName /// <summary> /// Порядок сортировки типа номера /// </summary> [XmlAttribute] public int RoomOrder /// <summary> /// Порядок сортировки категории номера /// </summary> [XmlAttribute] public int RoomCategoryOrder /// <summary> /// Порядок сортировки размещения /// </summary> [XmlAttribute] public int AccomodationOrder /// <summary> /// Валюта /// </summary> [XmlAttribute] public string Currency /// <summary> /// Ключи услуг, входящих в тур (через запятую) /// </summary> [XmlAttribute] public string Services /// <summary> /// Ключ прямого перелета (Charter) /// </summary> [XmlAttribute] public int CharterKey /// <summary> /// Ключ обратного перелета (Charter) /// </summary> [XmlAttribute] public int CharterBackKey /// <summary> /// День предоставления проживания /// </summary> [XmlAttribute] public int HotelDay /// <summary> /// Количество ночей проживания в отеле /// </summary> [XmlAttribute] public int HotelNights /// <summary> /// День прямого перелета /// </summary> [XmlAttribute] public int CharterDay /// <summary> /// День обратного перелета /// </summary> [XmlAttribute] public int CharterBackDay /// <summary> /// Пакет прямого перелета /// </summary> [XmlAttribute] public int CharterPacketKey /// <summary> /// Партнер прямого перелета /// </summary> [XmlAttribute] public int CharterPartnerKey /// <summary> /// Пакет обратного перелета /// </summary> [XmlAttribute] public int CharterBackPacketKey /// <summary> /// Партнер обратного перелета /// </summary> [XmlAttribute] public int CharterBackPartnerKey /// <summary> /// Наличие мест в отеле: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест. Пример /// 10:100 /// </summary> [XmlAttribute] public string HotelQuota /// <summary> /// Наличие мест на прямом перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу + через двоеточие общее кол-во мест, по каждому классу. Пример: /// 10:100|0:100|10:100 /// </summary> [XmlAttribute] public string CharterThereQuota /// <summary> /// Наличие мест на обратном перелете: больше нуля - места есть (количество мест в квоте), 0 - мест нет, меньше 0 - места по запросу /// </summary> [XmlAttribute] public string CharterBackQuota /// <summary> /// Номер строки /// </summary> [XmlAttribute] public int Id /// <summary> /// Номер строки /// </summary> [XmlAttribute] public int Key /// <summary> /// URL с описанием отеля /// </summary> [XmlAttribute] public string HotelURL /// <summary> /// URL с описанием тура /// </summary> [XmlAttribute] public string TourURL /// <summary> /// Текстовая строка с информацией о прямом перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) /// </summary> [XmlAttribute] public string CharterInfo /// <summary> /// Текстовая строка с информацией об обратном перелете (авиакомпания, рейс, время, аэропорт вылета/прилета) /// </summary> [XmlAttribute] public string CharterBackInfo /// <summary> /// Текстовая строка, содержащая ключи всех отелей в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelKeys /// <summary> /// Текстовая строка, содержащая ключи всех номеров в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelRoomKeys /// <summary> /// Текстовая строка, содержащая все продолжительности проживаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelNights /// <summary> /// Текстовая строка, содержащая все категории проживаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllHotelStars /// <summary> /// Текстовая строка, содержащая ключи всех питаний в пакете услуг (через запятую) /// </summary> [XmlAttribute] public string AllPansionKeys /// <summary> /// Текущий индекс динамического изменения цены для отеля (текущая цена = базовая цена + значение шага изменения цены * текущий индекс динамического изменения цены) /// </summary> [XmlAttribute] public int DynamicHotelPriceStepIndex /// <summary> /// Корректировка базовой цены для отеля (пока в шагах) /// </summary> [XmlAttribute] public double DynamicHotelPriceCorrection }
Работа в системе
Использование сервиса подборов тура
Для использования сервиса подборов тура необходимо вызвать метод DoSearch у сервиса Search.asmx со следующими параметрами:
- SearchFilter filter – объект класса, описывающего критерии подбора тура
- int pageNumber – порядковый номер запрашиваемой страницы (нумерация начинается с 0)
- SearchParams searchParams – объект класса, описывающего параметры подбора тура
Сервис возвращает объект класса SearchResult, содержащий коллекцию объектов класса SearchResultItem.
Примеры запросов к сервису
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DoSearch xmlns="http://megatec.ru/">
<filter CountryKey="90" ExcludeNoPlaces="true" DepartFromKey="1" IsAllHotels="true" IsAllTourType="false"
IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15" IsNullPriceMinimum="true" IsAllPansion="false">
<ExcludeTourType>false</ExcludeTourType>
<KindOfToursMask>All</KindOfToursMask>
<TurListAttributeMask>0</TurListAttributeMask>
<CruiseCountryKey>0</CruiseCountryKey>
<HotelPartnerKey>0</HotelPartnerKey>
<CruisePortKey>0</CruisePortKey>
<TurDateRange DateFrom="2016-09-12" DateTo="2016-09-20" />
<PansionKeys>1</PansionKeys>
</filter>
<pageNumber>0</pageNumber>
<searchParams Sort="PT_Price">
<CalculateVisaDeadline>false</CalculateVisaDeadline>
<NotDefaultSort>false</NotDefaultSort>
<IsShowCOName>false</IsShowCOName>
</searchParams>
</DoSearch>
</soap:Body>
</soap:Envelope>
|
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<DoSearch xmlns="http://megatec.ru/">
<filter CountryKey="90" ExcludeNoPlaces="false" DepartFromKey="1" IsAllHotels="true"
IsAllTourType="false" IsAllTourTypeDetails="false" Adults="2" Childs="0" PageSize="15"
IsNullPriceMinimum="true" IsAllPansion="false">
<DurationRange DurationFrom="0" DurationTo="0" />
<PansionKeys>
<anyType xsi:type="xsd:int">1</anyType>
<anyType xsi:type="xsd:int">2</anyType>
</PansionKeys>
<HotelStars>
<anyType xsi:type="xsd:string">1*</anyType>
<anyType xsi:type="xsd:string">2*</anyType>
</HotelStars>
<HotelKeys>
<anyType xsi:type="xsd:int">1</anyType>
<anyType xsi:type="xsd:int">2</anyType>
</HotelKeys>
<CityKeys>
<anyType xsi:type="xsd:int">2</anyType>
<anyType xsi:type="xsd:int">3</anyType>
</CityKeys>
<ResortKeys>
<anyType xsi:type="xsd:int">4</anyType>
<anyType xsi:type="xsd:int">5</anyType>
</ResortKeys>
<ExcludeTourType>false</ExcludeTourType>
<KindOfToursMask>All</KindOfToursMask>
<TurListAttributeMask>0</TurListAttributeMask>
<CruiseCountryKey>0</CruiseCountryKey>
<HotelPartnerKey>0</HotelPartnerKey>
<CruisePortKey>0</CruisePortKey>
<TurDateRange DateFrom="2017-05-12" DateTo="2017-05-12" />
<PansionKeys>1</PansionKeys>
</filter>
<pageNumber>0</pageNumber>
<searchParams Sort="PT_Price, pt_hdstars desc, pt_tourdate" CheckCQ="false" CheckNLQ="false">
<CalculateVisaDeadline>false</CalculateVisaDeadline>
<NotDefaultSort>false</NotDefaultSort>
<IsShowCOName>false</IsShowCOName>
</searchParams>
</DoSearch>
</soap:Body>
</soap:Envelope>
|