2016-01-26 3 views
0

Я использовал следующий код для создания запроса:продолжать получать ERR.SWS.CLIENT.VALIDATION_FAILED исключения при вызове OTA_AirBookRQ

  var dt = DateTime.UtcNow; 
      var tstamp = dt.ToString("s") + "Z"; 

      var msgHeader = new com.Sabre.WebServiceConsumer.LLS.MessageHeader { ConversationId = convid }; 

      var from = new com.Sabre.WebServiceConsumer.LLS.From(); 
      var fromPartyId = new com.Sabre.WebServiceConsumer.LLS.PartyId(); 
      var fromPartyIdArr = new com.Sabre.WebServiceConsumer.LLS.PartyId[1]; 
      fromPartyId.Value = "WebServiceClient"; 
      fromPartyIdArr[0] = fromPartyId; 
      from.PartyId = fromPartyIdArr; 
      msgHeader.From = from; 

      var to = new com.Sabre.WebServiceConsumer.LLS.To(); 
      var toPartyId = new com.Sabre.WebServiceConsumer.LLS.PartyId(); 
      var toPartyIdArr = new com.Sabre.WebServiceConsumer.LLS.PartyId[1]; 
      toPartyId.Value = "https://sws3-crt.cert.sabre.com"; 
      toPartyIdArr[0] = toPartyId; 
      to.PartyId = toPartyIdArr; 
      msgHeader.To = to; 

      msgHeader.CPAId = ipcc; 
      msgHeader.Action = "OTA_AirAvailLLSRQ"; 
      var service = new com.Sabre.WebServiceConsumer.LLS.Service { Value = "AirAvail" }; 
      msgHeader.Service = service; 

      //Create the request object req and the value for the IPCC in the payload of the request. 

      var flightSegments = new List<OTA_AirBookRQFlightSegment>(); 



      foreach (var flightData in itinerary.FlightsData) 
      { 

       var currSeg = new OTA_AirBookRQFlightSegment() 
            { 
             Status = "QF", 
             FlightNumber = flightData.FlightNum, 
             NumberInParty = "1", 
             ResBookDesigCode = "Y", 
             OriginLocation = 
              new OTA_AirBookRQFlightSegmentOriginLocation 
               { 
                LocationCode 
                 = 
                 flightData 
                 .Dep 
               }, 
             DestinationLocation = 
              new OTA_AirBookRQFlightSegmentDestinationLocation 
               { 
                LocationCode 
                 = 
                 flightData 
                 .Dest 
               }, 
             MarketingAirline = 
              new OTA_AirBookRQFlightSegmentMarketingAirline 
               { 
                Code 
                 = 
                 flightData 
                 .Carrier, 
                FlightNumber 
                 = 
                 flightData 
                 .FlightNum 
               }, 
            }; 

       if (flightData.DepartureDate != null) 
       { 
        currSeg.DepartureDateTime = flightData.DepartureDate.Value.ToString("s"); 
       } 
       if (flightData.ArrivalDate != null) 
       { 
        currSeg.ArrivalDateTime = flightData.ArrivalDate.Value.ToString("s"); 
       } 
       flightSegments.Add(currSeg); 
      } 


      var req = new OTA_AirBookRQ {ReturnHostCommand = true, OriginDestinationInformation = flightSegments.ToArray()}; 

      var msgData = new com.Sabre.WebServiceConsumer.LLS.MessageData 
           { 
            MessageId = 
             "mid:[email protected]", 
            Timestamp = tstamp 
           }; 
      msgHeader.MessageData = msgData; 
      var security = new com.Sabre.WebServiceConsumer.LLS.Security1 { BinarySecurityToken = securitytoken }; 

      var c = new OTA_AirBookPortTypeClient(); 
      var resp = c.OTA_AirBookRQ(ref msgHeader, ref security, req); 
      if (resp.ApplicationResults.status == com.Sabre.WebServiceConsumer.LLS.CompletionCodes.Complete) return true; 

я получил следующее исключение:

ERR.SWS.CLIENT .VALIDATION_FAILED

Удаленный Stack след: Сервер трассировки стека: на System.ServiceModel.Channels.ServiceChannel.HandleReply (ProxyOperationRuntime операции, ProxyRpc & RPC) в System.ServiceModel.Channels.ServiceChannel.Call (Action String, Логическое односторонняя, операция ProxyOperationRuntime, Object [] модули, Object [] выходы, TimeSpan тайм-аут) при System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage methodCall, операция ProxyOperationRuntime) на System.ServiceModel.Channels.ServiceChannelProxy.Invoke (IMessage сообщение)

Exception при вызваны повторно [0]:

Маршрут Я пытаюсь подделать маль ok - в оба конца со следующими сегментами: DFW-> LAS, Отправление: 2016-02-07T00: 00: 00, Прибытие: 2016-02-07T00: 00: 00, Перевозчик: NK, Номер рейса: 469 LAS-> DFW, Отправление: 2016-02-14T00: 00: 00, прибытие: 2016-02-14T00: 00: 00, Carrier: NK, самалёт: 470

Так что я создал OTA_AirBookRQ с 2 OTA_AirBookRQFlightSegment в OriginDestinationInformation (один для входящего DFW-> LAS и один для исходящего)

Я даже попытался сыграть с форматом даты/времени. Например, дайте: 2016-02-07T00: 00 или: 2016-02-07T вместо 2016-02-07T00: 00: 00, но получил одинаковое исключение каждый раз. Также попытался использовать только DepartureDateTime (без даты заезда) и получил тот же результат.

+1

Можете ли вы попробовать разместить серийный XML-код, который отправляется Sabre? Таким образом, проще понять, что не так в запросе. – fcarreno

ответ

0

Вы вызываете OTA_AirBookLLSRQ, но отправляете другое действие msgHeader.Action = "OTA_AirAvailLLSRQ";

Если остальная часть запроса верна, просто измените на: msgHeader.Action = "OTA_AirBookLLSRQ";