.net SOAP toolkit performance for SOAP deserialization

P

Prabhu

Hi All.
We are building an ASP.net application using C# & .net 1.1 framework.
The ASP.net application consumes web services (Java/Apache Axis
implementation) and we are facing issues that the application is very slow.

Initially we suspected network and server side responses as culprits.
But on further investigation (we override GetWebResponse and GetWebRequest
methods SOAPClient) we have found that the application is spending
considerable amount of time (1+ minute) in deserializing the SOAP response
from the server.

We are using VS.net 2003 for generating the proxies.

Has anyone faced such performance issues and any suggestions?
 
D

Dan Rogers

Hi,

How big is the response? Are there other implementations of clients that
deserialize more rapidly?

Regards

Dan Rogers
Microsoft Corporation
--------------------
 
P

Prabhu

Hi.
The responses are on an avg about 250K.
But the object nesting is quite deep (4 or 5 levels) in the WSDL (and the
proxy classes generated).

We are sort of first clients to these services, but there are some stubs
written in Java. We will try to measure deserialization performance in these
clients.

regards
 
D

Dan Rogers

In general a 250K response won't cause undue perf issues, nor will nesting
of a few levels. I would start to suspect constructor issues in the
classes that the XML maps to, but without a neutral test based on a schema,
and code output from a tool like XSD.exe or XsdObjectGen.exe, I'm unable to
troubleshoot this further.

If you can share schema or a reproducable end point where I can try this
out, I can help you more.

Regards,

Dan
--------------------
 
P

Prabhu

Hi Dan.
Thanks for the help.
I am pasting the WSDL of the service below. The operation that is most
problematic is "getAirfareQuotes"

Meanwhile we still are trying to get performance numbers for Java clients. I
will update forum once we have some consistent results.
regards
- prabhu

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:s1="urn:BeanService"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s2="http://xxxxx"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://linuxdev.travel2.com/api/services/api"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://xxxx.com/api/services/api"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xxxxx.com/api/services/api">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="ArrayOf_xsd_string">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s:string[]" ref="soapenc:arrayType"
/>
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_SeatAvailability">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:SeatAvailability[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_Sector">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:Sector[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_Leg">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:Leg[]" ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_RuleInfo">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:RuleInfo[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_StringArray">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:StringArray[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_FareDetail">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:FareDetail[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
</s:schema>
<s:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:BeanService">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="FareId">
<s:sequence>
<s:element name="contractId" nillable="true" type="s:string" />
<s:element name="contractedFare" type="s:boolean" />
<s:element name="destination" nillable="true" type="s:string" />
<s:element name="issuedDate" type="s:long" />
<s:element name="origin" nillable="true" type="s:string" />
<s:element name="publishedFare" type="s:boolean" />
<s:element name="publishedFareBasis" nillable="true"
type="s:string" />
<s:element name="routeRef" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="SearchParams">
<s:sequence>
<s:element name="airlineCode" nillable="true" type="s:string" />
<s:element name="cabinClassCode" nillable="true" type="s:string" />
<s:element name="departureDate" type="s:long" />
<s:element name="destinationCode" nillable="true" type="s:string" />
<s:element name="numAdults" type="s:int" />
<s:element name="numChildren" type="s:int" />
<s:element name="originCode" nillable="true" type="s:string" />
<s:element name="quickFareCommand" nillable="true" type="s:string"
/>
<s:element name="returnDate" type="s:long" />
<s:element name="usingQuickFare" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="AvailabilityRequest">
<s:sequence>
<s:element name="fareId" nillable="true" type="s1:FareId" />
<s:element name="searchParams" nillable="true"
type="s1:SearchParams" />
<s:element name="threeDaySearch" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="AgentId">
<s:sequence>
<s:element name="accountCode" nillable="true" type="s:string" />
<s:element name="atol" type="s:boolean" />
<s:element name="branchNumber" type="s:int" />
<s:element name="consortiaMemberId" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="RuleInfo">
<s:sequence>
<s:element name="freeText" nillable="true" type="s:string" />
<s:element name="name" nillable="true" type="s:string" />
</s:sequence>
</s:complexType>
<s:complexType name="BasicSector">
<s:sequence>
<s:element name="airlineCode" nillable="true" type="s:string" />
<s:element name="arrivalDateAndTime" type="s:long" />
<s:element name="departureDateAndTime" type="s:long" />
<s:element name="destinationCode" nillable="true" type="s:string" />
<s:element name="flightDurationHrs" type="s:int" />
<s:element name="flightDurationMins" type="s:int" />
<s:element name="flightNumber" nillable="true" type="s:string" />
<s:element name="operatorCode" nillable="true" type="s:string" />
<s:element name="originCode" nillable="true" type="s:string" />
<s:element name="touchDowns" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="SeatAvailability">
<s:sequence>
<s:element name="bookClass" nillable="true" type="s:string" />
<s:element name="numSeatsAvailable" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="Sector">
<s:complexContent mixed="false">
<s:extension base="s1:BasicSector">
<s:sequence>
<s:element name="aircraftTypeCode" nillable="true"
type="s:string" />
<s:element name="destinationName" nillable="true"
type="s:string" />
<s:element name="originName" nillable="true" type="s:string" />
<s:element name="remarks" nillable="true" type="s:string" />
<s:element name="seatAvailability" nillable="true"
type="tns:ArrayOf_tns1_SeatAvailability" />
<s:element name="statusStr" nillable="true" type="s:string" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="Leg">
<s:sequence>
<s:element name="journeyDurationHrs" type="s:int" />
<s:element name="journeyDurationMins" type="s:int" />
<s:element name="sectors" nillable="true"
type="tns:ArrayOf_tns1_Sector" />
</s:sequence>
</s:complexType>
<s:complexType name="CustomerFareBreakdown">
<s:sequence>
<s:element name="adultCount" type="s:int" />
<s:element name="allAdultsFare" type="s:double" />
<s:element name="allAdultsINA" type="s:double" />
<s:element name="allAdultsTax" type="s:double" />
<s:element name="allChildrenFare" type="s:double" />
<s:element name="allChildrenINA" type="s:double" />
<s:element name="allChildrenTax" type="s:double" />
<s:element name="childCount" type="s:int" />
<s:element name="partyTotal" type="s:double" />
<s:element name="perAdultFare" type="s:int" />
<s:element name="perAdultINA" type="s:double" />
<s:element name="perAdultTax" type="s:double" />
<s:element name="perAdultTotal" type="s:double" />
<s:element name="perChildFare" type="s:int" />
<s:element name="perChildINA" type="s:double" />
<s:element name="perChildTax" type="s:double" />
<s:element name="perChildTotal" type="s:double" />
</s:sequence>
</s:complexType>
<s:complexType name="RequoteAirfareRequest">
<s:sequence>
<s:element name="agentId" nillable="true" type="s1:AgentId" />
<s:element name="consumerFacing" type="s:boolean" />
<s:element name="fareId" nillable="true" type="s1:FareId" />
<s:element name="inboundClasses" nillable="true" type="s:string" />
<s:element name="inboundLeg" nillable="true" type="s1:Leg" />
<s:element name="originalQuote" nillable="true"
type="s1:CustomerFareBreakdown" />
<s:element name="outboundClasses" nillable="true" type="s:string" />
<s:element name="outboundLeg" nillable="true" type="s1:Leg" />
<s:element name="searchParams" nillable="true"
type="s1:SearchParams" />
</s:sequence>
</s:complexType>
<s:complexType name="AgentFareBreakdown">
<s:sequence>
<s:element name="INA" type="s:double" />
<s:element name="bookingId" nillable="true" type="s1:BookingId" />
<s:element name="nettDue" type="s:double" />
<s:element name="nettFare" type="s:double" />
<s:element name="paidAccrued" type="s:double" />
<s:element name="tax" type="s:double" />
</s:sequence>
</s:complexType>
<s:complexType name="Availability">
<s:sequence>
<s:element name="eitherLegMissing" type="s:boolean" />
<s:element name="inboundClasses" nillable="true"
type="tns:ArrayOf_xsd_string" />
<s:element name="inboundLegMissing" type="s:boolean" />
<s:element name="inboundLegs" nillable="true"
type="tns:ArrayOf_tns1_Leg" />
<s:element name="outboundClasses" nillable="true"
type="tns:ArrayOf_xsd_string" />
<s:element name="outboundLegMissing" type="s:boolean" />
<s:element name="outboundLegs" nillable="true"
type="tns:ArrayOf_tns1_Leg" />
<s:element name="returnTrip" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="StringArray">
<s:sequence>
<s:element name="value" nillable="true"
type="tns:ArrayOf_xsd_string" />
</s:sequence>
</s:complexType>
<s:complexType name="FareDetail">
<s:sequence>
<s:element name="agentBreakdown" nillable="true"
type="s1:AgentFareBreakdown" />
<s:element name="airlineCode" nillable="true" type="s:string" />
<s:element name="availability" nillable="true"
type="s1:Availability" />
<s:element name="bookable" type="s:boolean" />
<s:element name="bookingClasses" nillable="true" type="s:string" />
<s:element name="cabinClassCode" nillable="true" type="s:string" />
<s:element name="destinationCode" nillable="true" type="s:string" />
<s:element name="destinationName" nillable="true" type="s:string" />
<s:element name="displayableRules" nillable="true"
type="tns:ArrayOf_tns1_RuleInfo" />
<s:element name="fareBreakdown" nillable="true"
type="s1:CustomerFareBreakdown" />
<s:element name="fareId" nillable="true" type="s1:FareId" />
<s:element name="fareSeasonFromDate" type="s:long" />
<s:element name="fareSeasonToDate" type="s:long" />
<s:element name="inboundAvailable" type="s:boolean" />
<s:element name="originCode" nillable="true" type="s:string" />
<s:element name="originName" nillable="true" type="s:string" />
<s:element name="outboundAvailable" type="s:boolean" />
<s:element name="touchdownCount" type="s:int" />
<s:element name="transitAirports" nillable="true"
type="tns:ArrayOf_tns1_StringArray" />
<s:element name="validity" nillable="true" type="s:string" />
</s:sequence>
</s:complexType>
<s:complexType name="AirfareQuotesResponse">
<s:sequence>
<s:element name="fareDetails" nillable="true"
type="tns:ArrayOf_tns1_FareDetail" />
<s:element name="moreAvailable" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="AirfareQuotesRequest">
<s:sequence>
<s:element name="agentId" nillable="true" type="s1:AgentId" />
<s:element name="availabilityRequired" type="s:boolean" />
<s:element name="consumerFacing" type="s:boolean" />
<s:element name="priorFareId" nillable="true" type="s1:FareId" />
<s:element name="searchParams" nillable="true"
type="s1:SearchParams" />
</s:sequence>
</s:complexType>
<s:complexType name="NonAtolAgentFareBreakdown">
<s:complexContent mixed="false">
<s:extension base="s1:AgentFareBreakdown">
<s:sequence>
<s:element name="commission" type="s:double" />
<s:element name="grossFare" type="s:double" />
<s:element name="grossTotal" type="s:double" />
<s:element name="nettTotal" type="s:double" />
<s:element name="vatOnCommission" type="s:double" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
</s:schema>
<s:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xxx.com">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="APIException">
<s:sequence />
</s:complexType>
</s:schema>
</wsdl:types>
<wsdl:message name="getAirfareQuotesRequest">
<wsdl:part name="request" type="s1:AirfareQuotesRequest" />
</wsdl:message>
<wsdl:message name="getAirfareQuotesResponse">
<wsdl:part name="getAirfareQuotesReturn" type="s1:AirfareQuotesResponse"
/>
</wsdl:message>
<wsdl:message name="APIException">
<wsdl:part name="fault" type="s2:APIException" />
</wsdl:message>
<wsdl:portType name="API">
<wsdl:eek:peration name="getAirfareQuotes" parameterOrder="request">
<wsdl:input name="getAirfareQuotesRequest"
message="tns:getAirfareQuotesRequest" />
<wsdl:eek:utput name="getAirfareQuotesResponse"
message="tns:getAirfareQuotesResponse" />
<wsdl:fault name="APIException" message="tns:APIException" />
</wsdl:eek:peration>
</wsdl:portType>
<wsdl:binding name="apiSoapBinding" type="tns:API">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="rpc" />
<wsdl:eek:peration name="getAirfareQuotes">
<soap:eek:peration soapAction="" />
<wsdl:input name="getAirfareQuotesRequest">
<soap:body use="encoded" namespace="http://websrv.fbse.travel2.com"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:input>
<wsdl:eek:utput name="getAirfareQuotesResponse">
<soap:body use="encoded"
namespace="http://someserver.com/api/services/api"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:eek:utput>
<wsdl:fault name="APIException">
<soap:fault use="encoded"
namespace="http://someserver.com/api/services/api"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:fault>
</wsdl:eek:peration>
</wsdl:binding>
<wsdl:service name="APIService">
<wsdl:port name="api" binding="tns:apiSoapBinding">
<soap:address location="http://testapi_host/api/services/api" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
 
D

Dan Rogers

Hi Prabhu,

These are pretty big, and pretty complex message structures. I'd not be
surprized if you are experiencing constuction delays because of all of the
repeating array of array of array nesting going on. Have you the ability
to switch this service design over to a document literal design instead of
an encoded design? In that approach, you'd have more complicated class
member types, but you might see a difference in how the "constructor" delay
is effecting your performance (if it is a constructor delay at all). In
other words, have you thought about schematizing this design and not
treating the data as arrays of types that contain other arrays?

I can't promise it would help, but I've been able to get awesome
performance in literal design, and also this would make the service design
more interoperable and follow interop guidelines such as those published on
WS-I.org.

Hope this helps

Dan
--------------------
Thread-Topic: .net SOAP toolkit performance for SOAP deserialization
thread-index: AcTMbiucldCHmwceQhWWXfbd5wyA7Q==
X-WBNR-Posting-Host: 203.123.182.26
From: =?Utf-8?B?UHJhYmh1?= <[email protected]>
References: <[email protected]>
<[email protected]>
Subject: RE: .net SOAP toolkit performance for SOAP deserialization
Date: Tue, 16 Nov 2004 22:25:02 -0800
Lines: 380
Message-ID: <[email protected]>
MIME-Version: 1.0
Content-Type: text/plain;
charset="Utf-8"
Content-Transfer-Encoding: 7bit
X-Newsreader: Microsoft CDO for Windows 2000
Content-Class: urn:content-classes:message
Importance: normal
Priority: normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0
Newsgroups: microsoft.public.dotnet.framework.aspnet.webservices
NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA01.phx.gbl!TK2MSFTNGXA03.phx.gbl
Xref: cpmsftngxa10.phx.gbl microsoft.public.dotnet.framework.aspnet.webservices:26656
X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservices

Hi Dan.
Thanks for the help.
I am pasting the WSDL of the service below. The operation that is most
problematic is "getAirfareQuotes"

Meanwhile we still are trying to get performance numbers for Java clients. I
will update forum once we have some consistent results.
regards
- prabhu

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:s1="urn:BeanService"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s2="http://xxxxx"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://linuxdev.travel2.com/api/services/api"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://xxxx.com/api/services/api"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xxxxx.com/api/services/api">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="ArrayOf_xsd_string">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s:string[]" ref="soapenc:arrayType"
/>
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_SeatAvailability">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:SeatAvailability[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_Sector">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:Sector[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_Leg">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:Leg[]" ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_RuleInfo">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:RuleInfo[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_StringArray">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:StringArray[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
<s:complexType name="ArrayOf_tns1_FareDetail">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:attribute wsdl:arrayType="s1:FareDetail[]"
ref="soapenc:arrayType" />
</s:restriction>
</s:complexContent>
</s:complexType>
</s:schema>
<s:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:BeanService">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="FareId">
<s:sequence>
<s:element name="contractId" nillable="true" type="s:string" />
<s:element name="contractedFare" type="s:boolean" />
<s:element name="destination" nillable="true" type="s:string" />
<s:element name="issuedDate" type="s:long" />
<s:element name="origin" nillable="true" type="s:string" />
<s:element name="publishedFare" type="s:boolean" />
<s:element name="publishedFareBasis" nillable="true"
type="s:string" />
<s:element name="routeRef" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="SearchParams">
<s:sequence>
<s:element name="airlineCode" nillable="true" type="s:string" />
<s:element name="cabinClassCode" nillable="true" type="s:string" />
<s:element name="departureDate" type="s:long" />
<s:element name="destinationCode" nillable="true" type="s:string" />
<s:element name="numAdults" type="s:int" />
<s:element name="numChildren" type="s:int" />
<s:element name="originCode" nillable="true" type="s:string" />
<s:element name="quickFareCommand" nillable="true" type="s:string"
/>
<s:element name="returnDate" type="s:long" />
<s:element name="usingQuickFare" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="AvailabilityRequest">
<s:sequence>
<s:element name="fareId" nillable="true" type="s1:FareId" />
<s:element name="searchParams" nillable="true"
type="s1:SearchParams" />
<s:element name="threeDaySearch" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="AgentId">
<s:sequence>
<s:element name="accountCode" nillable="true" type="s:string" />
<s:element name="atol" type="s:boolean" />
<s:element name="branchNumber" type="s:int" />
<s:element name="consortiaMemberId" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="RuleInfo">
<s:sequence>
<s:element name="freeText" nillable="true" type="s:string" />
<s:element name="name" nillable="true" type="s:string" />
</s:sequence>
</s:complexType>
<s:complexType name="BasicSector">
<s:sequence>
<s:element name="airlineCode" nillable="true" type="s:string" />
<s:element name="arrivalDateAndTime" type="s:long" />
<s:element name="departureDateAndTime" type="s:long" />
<s:element name="destinationCode" nillable="true" type="s:string" />
<s:element name="flightDurationHrs" type="s:int" />
<s:element name="flightDurationMins" type="s:int" />
<s:element name="flightNumber" nillable="true" type="s:string" />
<s:element name="operatorCode" nillable="true" type="s:string" />
<s:element name="originCode" nillable="true" type="s:string" />
<s:element name="touchDowns" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="SeatAvailability">
<s:sequence>
<s:element name="bookClass" nillable="true" type="s:string" />
<s:element name="numSeatsAvailable" type="s:int" />
</s:sequence>
</s:complexType>
<s:complexType name="Sector">
<s:complexContent mixed="false">
<s:extension base="s1:BasicSector">
<s:sequence>
<s:element name="aircraftTypeCode" nillable="true"
type="s:string" />
<s:element name="destinationName" nillable="true"
type="s:string" />
<s:element name="originName" nillable="true" type="s:string" />
<s:element name="remarks" nillable="true" type="s:string" />
<s:element name="seatAvailability" nillable="true"
type="tns:ArrayOf_tns1_SeatAvailability" />
<s:element name="statusStr" nillable="true" type="s:string" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="Leg">
<s:sequence>
<s:element name="journeyDurationHrs" type="s:int" />
<s:element name="journeyDurationMins" type="s:int" />
<s:element name="sectors" nillable="true"
type="tns:ArrayOf_tns1_Sector" />
</s:sequence>
</s:complexType>
<s:complexType name="CustomerFareBreakdown">
<s:sequence>
<s:element name="adultCount" type="s:int" />
<s:element name="allAdultsFare" type="s:double" />
<s:element name="allAdultsINA" type="s:double" />
<s:element name="allAdultsTax" type="s:double" />
<s:element name="allChildrenFare" type="s:double" />
<s:element name="allChildrenINA" type="s:double" />
<s:element name="allChildrenTax" type="s:double" />
<s:element name="childCount" type="s:int" />
<s:element name="partyTotal" type="s:double" />
<s:element name="perAdultFare" type="s:int" />
<s:element name="perAdultINA" type="s:double" />
<s:element name="perAdultTax" type="s:double" />
<s:element name="perAdultTotal" type="s:double" />
<s:element name="perChildFare" type="s:int" />
<s:element name="perChildINA" type="s:double" />
<s:element name="perChildTax" type="s:double" />
<s:element name="perChildTotal" type="s:double" />
</s:sequence>
</s:complexType>
<s:complexType name="RequoteAirfareRequest">
<s:sequence>
<s:element name="agentId" nillable="true" type="s1:AgentId" />
<s:element name="consumerFacing" type="s:boolean" />
<s:element name="fareId" nillable="true" type="s1:FareId" />
<s:element name="inboundClasses" nillable="true" type="s:string" />
<s:element name="inboundLeg" nillable="true" type="s1:Leg" />
<s:element name="originalQuote" nillable="true"
type="s1:CustomerFareBreakdown" />
<s:element name="outboundClasses" nillable="true" type="s:string" />
<s:element name="outboundLeg" nillable="true" type="s1:Leg" />
<s:element name="searchParams" nillable="true"
type="s1:SearchParams" />
</s:sequence>
</s:complexType>
<s:complexType name="AgentFareBreakdown">
<s:sequence>
<s:element name="INA" type="s:double" />
<s:element name="bookingId" nillable="true" type="s1:BookingId" />
<s:element name="nettDue" type="s:double" />
<s:element name="nettFare" type="s:double" />
<s:element name="paidAccrued" type="s:double" />
<s:element name="tax" type="s:double" />
</s:sequence>
</s:complexType>
<s:complexType name="Availability">
<s:sequence>
<s:element name="eitherLegMissing" type="s:boolean" />
<s:element name="inboundClasses" nillable="true"
type="tns:ArrayOf_xsd_string" />
<s:element name="inboundLegMissing" type="s:boolean" />
<s:element name="inboundLegs" nillable="true"
type="tns:ArrayOf_tns1_Leg" />
<s:element name="outboundClasses" nillable="true"
type="tns:ArrayOf_xsd_string" />
<s:element name="outboundLegMissing" type="s:boolean" />
<s:element name="outboundLegs" nillable="true"
type="tns:ArrayOf_tns1_Leg" />
<s:element name="returnTrip" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="StringArray">
<s:sequence>
<s:element name="value" nillable="true"
type="tns:ArrayOf_xsd_string" />
</s:sequence>
</s:complexType>
<s:complexType name="FareDetail">
<s:sequence>
<s:element name="agentBreakdown" nillable="true"
type="s1:AgentFareBreakdown" />
<s:element name="airlineCode" nillable="true" type="s:string" />
<s:element name="availability" nillable="true"
type="s1:Availability" />
<s:element name="bookable" type="s:boolean" />
<s:element name="bookingClasses" nillable="true" type="s:string" />
<s:element name="cabinClassCode" nillable="true" type="s:string" />
<s:element name="destinationCode" nillable="true" type="s:string" />
<s:element name="destinationName" nillable="true" type="s:string" />
<s:element name="displayableRules" nillable="true"
type="tns:ArrayOf_tns1_RuleInfo" />
<s:element name="fareBreakdown" nillable="true"
type="s1:CustomerFareBreakdown" />
<s:element name="fareId" nillable="true" type="s1:FareId" />
<s:element name="fareSeasonFromDate" type="s:long" />
<s:element name="fareSeasonToDate" type="s:long" />
<s:element name="inboundAvailable" type="s:boolean" />
<s:element name="originCode" nillable="true" type="s:string" />
<s:element name="originName" nillable="true" type="s:string" />
<s:element name="outboundAvailable" type="s:boolean" />
<s:element name="touchdownCount" type="s:int" />
<s:element name="transitAirports" nillable="true"
type="tns:ArrayOf_tns1_StringArray" />
<s:element name="validity" nillable="true" type="s:string" />
</s:sequence>
</s:complexType>
<s:complexType name="AirfareQuotesResponse">
<s:sequence>
<s:element name="fareDetails" nillable="true"
type="tns:ArrayOf_tns1_FareDetail" />
<s:element name="moreAvailable" type="s:boolean" />
</s:sequence>
</s:complexType>
<s:complexType name="AirfareQuotesRequest">
<s:sequence>
<s:element name="agentId" nillable="true" type="s1:AgentId" />
<s:element name="availabilityRequired" type="s:boolean" />
<s:element name="consumerFacing" type="s:boolean" />
<s:element name="priorFareId" nillable="true" type="s1:FareId" />
<s:element name="searchParams" nillable="true"
type="s1:SearchParams" />
</s:sequence>
</s:complexType>
<s:complexType name="NonAtolAgentFareBreakdown">
<s:complexContent mixed="false">
<s:extension base="s1:AgentFareBreakdown">
<s:sequence>
<s:element name="commission" type="s:double" />
<s:element name="grossFare" type="s:double" />
<s:element name="grossTotal" type="s:double" />
<s:element name="nettTotal" type="s:double" />
<s:element name="vatOnCommission" type="s:double" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
</s:schema>
<s:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xxx.com">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="APIException">
<s:sequence />
</s:complexType>
</s:schema>
</wsdl:types>
<wsdl:message name="getAirfareQuotesRequest">
<wsdl:part name="request" type="s1:AirfareQuotesRequest" />
</wsdl:message>
<wsdl:message name="getAirfareQuotesResponse">
<wsdl:part name="getAirfareQuotesReturn" type="s1:AirfareQuotesResponse"
/>
</wsdl:message>
<wsdl:message name="APIException">
<wsdl:part name="fault" type="s2:APIException" />
</wsdl:message>
<wsdl:portType name="API">
<wsdl:eek:peration name="getAirfareQuotes" parameterOrder="request">
<wsdl:input name="getAirfareQuotesRequest"
message="tns:getAirfareQuotesRequest" />
<wsdl:eek:utput name="getAirfareQuotesResponse"
message="tns:getAirfareQuotesResponse" />
<wsdl:fault name="APIException" message="tns:APIException" />
</wsdl:eek:peration>
</wsdl:portType>
<wsdl:binding name="apiSoapBinding" type="tns:API">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="rpc" />
<wsdl:eek:peration name="getAirfareQuotes">
<soap:eek:peration soapAction="" />
<wsdl:input name="getAirfareQuotesRequest">
<soap:body use="encoded" namespace="http://websrv.fbse.travel2.com"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:input>
<wsdl:eek:utput name="getAirfareQuotesResponse">
<soap:body use="encoded"
namespace="http://someserver.com/api/services/api"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:eek:utput>
<wsdl:fault name="APIException">
<soap:fault use="encoded"
namespace="http://someserver.com/api/services/api"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</wsdl:fault>
</wsdl:eek:peration>
</wsdl:binding>
<wsdl:service name="APIService">
<wsdl:port name="api" binding="tns:apiSoapBinding">
<soap:address location="http://testapi_host/api/services/api" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>




Dan Rogers said:
In general a 250K response won't cause undue perf issues, nor will nesting
of a few levels. I would start to suspect constructor issues in the
classes that the XML maps to, but without a neutral test based on a schema,
and code output from a tool like XSD.exe or XsdObjectGen.exe, I'm unable to
troubleshoot this further.

If you can share schema or a reproducable end point where I can try this
out, I can help you more.

Regards,

Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,439
Members
44,829
Latest member
PIXThurman

Latest Threads

Top