GetHotelDescriptiveInfo Soap — ошибка ‘SabreHeader / Service отсутствует или не завершена’

#c# #soap #sabre

#c# #soap #sabre

Вопрос:

Я пытаюсь работать с новой службой GetHotelDescriptiveInfo и создал объект заголовка сообщения, поскольку в прошлом я создавал другие запросы версии v1 без проблем, но для этой службы при ее выполнении я получаю следующий ответ об ошибке:

 <ns4:ApplicationResults xmlns:ns4="http://services.sabre.com/STL_Payload/v02_01" status="NotProcessed">
    <ns4:Error type="Validation" timeStamp="2016-10-21T08:15:07.497-05:00">
        <ns4:SystemSpecificResults>
            <ns4:Message code="ERR.NGHP-CONTENT.CLIENT.INVALID_REQUEST">
                SabreHeader/Service missing or incomplete
            </ns4:Message>
        </ns4:SystemSpecificResults>
    </ns4:Error>
</ns4:ApplicationResults>
  

Вот код, используемый для создания объекта MessageHeader;

 MessageHeader header = new MessageHeader();
header.ConversationId = this.Session.ConversationId;

From from = new From();
PartyId fromPartyId = new PartyId();
fromPartyId.Value = "WebServiceClient";
PartyId[] fromPartyIdArr = new PartyId[1];
fromPartyIdArr[0] = fromPartyId;
from.PartyId = fromPartyIdArr;
header.From = from;

To to = new To();
PartyId toPartyId = new PartyId();
toPartyId.Value = "WebServiceSupplier";
PartyId[] toPartyIdArr = new PartyId[1];
toPartyIdArr[0] = toPartyId;
to.PartyId = toPartyIdArr;
header.To = to;

header.CPAId = this.Session.PCC;
header.Action = "GetHotelDescriptiveInfoRQ";
header.Service = new Service();
header.Service.Value = "GetHotelDescriptiveInfoRQ";

MessageData msgData = new MessageData();
msgData.MessageId = String.Format("mid:{0}@clientofsabre.com1", DateTime.Now.ToString("yyyyMMDD-HHmmss-ffff"));
msgData.Timestamp = String.Format("{0}Z", DateTime.UtcNow.ToString("s"));
header.MessageData = msgData;
  

Я не уверен, чего мне не хватает в заголовке. Является ли это частью информации или у меня неверное значение service. Я пробовал многочисленные варианты значения service, но безуспешно. Кто-нибудь сталкивался с этой ошибкой раньше?

Обновить:

Ниже приведен пример сгенерированного xml с замаскированными конфиденциальными данными.

 <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmln s:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
        <MessageHeader xmlns="http://www.ebxml.org/namespaces/messageHeader">
            <From>
                <PartyId>WebServiceClient</PartyId>
            </From>
            <To>
                <PartyId>WebServiceSupplier</Party Id>
            </To>
            <CPAId>XXXX</CPAId>
            <ConversationId>XXXXXXXXXXXXXXXX</ConversationId>
            <Service>GetHotelDescriptiveInfoRQ</Service>
            <Action>GetHotelDescriptiveInfoRQ</Action>
            <MessageData>
                <MessageId>mid:201611DD-0934 50-6693@clientofsabre.com</MessageId>
                <Timestamp>2016-11-21T14:3 4:50Z</Timestamp>
            </MessageData>
        </MessageHeader>
        <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext">
            <BinarySecurityToken>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</BinarySecurityToken>
        </Security>
    </soap:Header>
    <soap:Body>
        <GetHotelDescriptiveInfoRQ xmlns="http://services.sabre.com/hotel/descriptiveinfo/v1">
            <HotelRefs>
                <HotelRef HotelCode="2355" />
                <HotelRef HotelCode="2356" />
            </HotelRefs>
            <DescriptiveInfoRef>
                <PropertyInfo>true</PropertyInfo>
                <LocationInfo>true</LocationInfo>
                <Amenities>true</Amenities>
                <Airports>true</Airports>
                <AcceptedCreditCards>false</AcceptedCreditCards>
            </DescriptiveInfoRef>
        </GetHotelDescriptiveInfoRQ>
    </soap:Body>
</soap:Envelope>
  

ОБНОВЛЕНИЕ: я смог заставить службу работать, используя реализацию REST, но мне все еще интересно узнать об ошибке, касающейся реализации SOAP.

Спасибо

Комментарии:

1. Можете ли вы предоставить общий доступ к сгенерированному XML из вашего кода?

2. обновлено исходное сообщение с образцом xml

Ответ №1:

Я решаю эту ошибку, просто добавляя параметр version к основному тегу запроса в теле: version=»1.0.0″.

Перед:

 <GetHotelDescriptiveInfoRQ xmlns="http://services.sabre.com/hotel/descriptiveinfo/v1">
  

После:

 <GetHotelDescriptiveInfoRQ version="1.0.0" xmlns="http://services.sabre.com/hotel/descriptiveinfo/v1">
  

Комментарии:

1. Даже с атрибутом version я не могу заставить его работать. Я получаю <Message code="ERR.NGHP-CONTENT.SERVICE_NOT_FOUND">Service GetHotelDescriptiveInfoRQ:GetHotelDescriptiveInfoRQ:1.0.0 not found</Message> . Я предполагаю, что они либо удалили службу (по какой-то причине), либо изменили версию. Но номер версии на веб-сайте doc по-прежнему тот же. Можете ли вы сказать мне, работает ли это все еще у вас?

Ответ №2:

Sabre крайне неорганизован, когда дело доходит до соблюдения какого-либо стандарта во всех своих API. Этот API не принимает «service» в заголовке.

Заменить

 "Service" => "GetHotelDescriptiveInfoRQ",
  

с

 "Service" => "",
  

в вашем заголовке.