在C#中使用Amadeus Soap4.0

时间:2017-12-15 16:05:09

标签: c# soap amadeus

C#代码:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sec="http://xml.amadeus.com/2010/06/Security_v1" xmlns:typ="http://xml.amadeus.com/2010/06/Types_v1" xmlns:iat="http://www.iata.org/IATA/2007/00/IATA2010.1" xmlns:app="http://xml.amadeus.com/2010/06/AppMdw_CommonTypes_v3" xmlns:link="http://wsdl.amadeus.com/2010/06/ws/Link_v1" xmlns:ses="http://xml.amadeus.com/2010/06/Session_v3" xmlns:fmp="http://xml.amadeus.com/FMPTBQ_14_3_1A">
   <soapenv:Header>
    <add:MessageID xmlns:add="http://www.w3.org/2005/08/addressing">29e8e874-3033-dd52-6b75-a2da58e10291</add:MessageID>
    <add:Action xmlns:add="http://www.w3.org/2005/08/addressing">http://webservices.amadeus.com/fmptbq_14_3_1A</add:Action>
    <add:To xmlns:add="http://www.w3.org/2005/08/addressing">https://noded1.test.webservices.amadeus.com/1asiwmlfpnp</add:To>
    <link:TransactionFlowLink xmlns:link="http://wsdl.amadeus.com/2010/06/ws/Link_v1"/>
    <oas:Security xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <oas:UsernameToken oas1:Id="UsernameToken-1" xmlns:oas1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <oas:Username>WSPNPMLF</oas:Username>
            <oas:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">bTEzbk5LNElzZw==</oas:Nonce>
            <oas:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">5lkky7mUVRujQPg4blzfKi5dSyg=</oas:Password>
            <oas1:Created>2017-12-15T13:43:34:532Z</oas1:Created>
        </oas:UsernameToken>
    </oas:Security>
    <AMA_SecurityHostedUser xmlns="http://xml.amadeus.com/2010/06/Security_v1">
        <UserID AgentDutyCode="SU" POS_Type="1" PseudoCityCode="BLRVS32CY" RequestorType="U"/>
    </AMA_SecurityHostedUser>
</soapenv:Header>
   <soapenv:Body>
      <Fare_MasterPricerTravelBoardSearch>
  <numberOfUnit>
    <unitNumberDetail>
      <numberOfUnits>1</numberOfUnits>
      <typeOfUnit>PX</typeOfUnit>
    </unitNumberDetail>
    <unitNumberDetail>
      <numberOfUnits>250</numberOfUnits>
      <typeOfUnit>RC</typeOfUnit>
    </unitNumberDetail>
  </numberOfUnit>
  <paxReference>
    <ptc>ADT</ptc>
    <traveller>
      <ref>1</ref>
    </traveller>
  </paxReference>
  <fareOptions>
    <pricingTickInfo>
      <pricingTicketing>
        <priceType>RP</priceType>
        <priceType>RU</priceType>
        <priceType>TAC</priceType>
        <priceType>ET</priceType>
        </pricingTicketing>
    </pricingTickInfo>
  </fareOptions>
  <travelFlightInfo>
    <cabinId>
      <cabinQualifier>RC</cabinQualifier>
      <cabin>Y</cabin>
    </cabinId>
  </travelFlightInfo>
  <itinerary>
    <requestedSegmentRef>
      <segRef>1</segRef>
    </requestedSegmentRef>
    <departureLocalization>
      <depMultiCity>
        <locationId>DEL</locationId>
      </depMultiCity>
    </departureLocalization>
    <arrivalLocalization>
      <arrivalMultiCity>
        <locationId>BOM</locationId>
      </arrivalMultiCity>
    </arrivalLocalization>
    <timeDetails>
      <firstDateTimeDetail>
        <timeQualifier>TD</timeQualifier>
        <date>201217</date>
        <time>0000</time>
        <timeWindow></timeWindow>
      </firstDateTimeDetail>
    </timeDetails>
  </itinerary>
  <itinerary>
    <requestedSegmentRef>
      <segRef>1</segRef>
    </requestedSegmentRef>
    <departureLocalization>
      <depMultiCity>
        <locationId>BOM</locationId>
      </depMultiCity>
    </departureLocalization>
    <arrivalLocalization>
      <arrivalMultiCity>
        <locationId>DEL</locationId>
      </arrivalMultiCity>
    </arrivalLocalization>
    <timeDetails>
      <firstDateTimeDetail>
        <timeQualifier>TD</timeQualifier>
        <date>251217</date>
        <time>0000</time>
        <timeWindow></timeWindow>
      </firstDateTimeDetail>
    </timeDetails>
  </itinerary>
</Fare_MasterPricerTravelBoardSearch>
   </soapenv:Body>
</soapenv:Envelope>

请求:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>12|Presentation|soap message header incorrect</faultstring>
         <faultactor>SI:muxDZ2</faultactor>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

回应:

override func layoutSubviews() {
        super.layoutSubviews()

        imageView?.bounds = CGRect(x: 0, y: 0, width: 32, height: 32)
        imageView?.contentMode = .scaleAspectFit

    }

当使用SoapUI传递相同的请求时,我会得到响应,但是当使用C#代码时我得到了上述响应..如果有人在C#中实现了Amadeus Soap4.0 API,请帮忙。

1 个答案:

答案 0 :(得分:0)

也许您已设置SoapUI对请求有效负载执行其他操作(因此请求不一样)?

我建议从给定的WSDL创建一个代理类。虽然此代理类默认情况下不支持Nonce,但它是可扩展的。看看WCF: Adding Nonce to UsernameToken

现在你得到的12个错误代码也可以来自其他东西....例如我不会在那里看到你的<Session />元素(除非这代表无状态请求?)