.net SOAP toolkit performance for SOAP deserialization

Ask a Question related to ASP.NET Web Services, Design and Development.

  1. #1

    Default .net SOAP toolkit performance for SOAP deserialization

    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?

    Prabhu Guest

  2. Similar Questions and Discussions

    1. ASP web service with ssl in soap toolkit 3 problem
      Hi I somehow can't access my web service thru SSL. I tried all things even including certificates in Local Computers (even in Imediate trust...
    2. Hashtable to VBA using SOAP Toolkit
      How an ASP.Net webservice return hashtable or any other (key value pairs like structure) that can be consumed in VBA or vbscript like this following...
    3. Using .NET web service with SOAP Toolkit 3
      I have written a .NET web service and would like to consume it using a SOAP client. To handle complex types I need to create a WSML file. I...
    4. Consuming an ASP .NET Web Service using the MS SOAP Toolkit v3.0
      Hi all I think I am going to go mad if I cant solve this problem. Basically I have created a simple .NET Web Service that takes a string as a...
    5. SOAP Client creation in ASP.NET using MS SOAP Toolkit
      how would I create a SOAP client in ASP.Net? The following code just works fine in VB: Dim lobjSOAP As New MSSOAPLib30.SoapClient30...
  3. #2

    Default RE: .net SOAP toolkit performance for SOAP deserialization

    Hi,

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

    Regards

    Dan Rogers
    Microsoft Corporation
    --------------------
    >Thread-Topic: .net SOAP toolkit performance for SOAP deserialization
    >thread-index: AcTIpKogGJkADvEfQymOXvVBC0AhVg==
    >X-WBNR-Posting-Host: 203.123.182.26
    >From: =?Utf-8?B?UHJhYmh1?= <Prabhu@discussions.microsoft.com>
    >Subject: .net SOAP toolkit performance for SOAP deserialization
    >Date: Fri, 12 Nov 2004 02:45:02 -0800
    >Lines: 15
    >Message-ID: <476D5BFD-4063-4233-9CE4-CA5A9EC72885@microsoft.com>
    >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.webservic es
    >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
    >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
    >Xref: cpmsftngxa10.phx.gbl
    microsoft.public.dotnet.framework.aspnet.webservic es:26495
    >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservic es
    >
    >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?
    >
    >
    Dan Rogers Guest

  4. #3

    Default RE: .net SOAP toolkit performance for SOAP deserialization

    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




    "Dan Rogers" wrote:
    > Hi,
    >
    > How big is the response? Are there other implementations of clients that
    > deserialize more rapidly?
    >
    > Regards
    >
    > Dan Rogers
    > Microsoft Corporation
    > --------------------
    > >Thread-Topic: .net SOAP toolkit performance for SOAP deserialization
    > >thread-index: AcTIpKogGJkADvEfQymOXvVBC0AhVg==
    > >X-WBNR-Posting-Host: 203.123.182.26
    > >From: =?Utf-8?B?UHJhYmh1?= <Prabhu@discussions.microsoft.com>
    > >Subject: .net SOAP toolkit performance for SOAP deserialization
    > >Date: Fri, 12 Nov 2004 02:45:02 -0800
    > >Lines: 15
    > >Message-ID: <476D5BFD-4063-4233-9CE4-CA5A9EC72885@microsoft.com>
    > >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.webservic es
    > >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
    > >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
    > >Xref: cpmsftngxa10.phx.gbl
    > microsoft.public.dotnet.framework.aspnet.webservic es:26495
    > >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservic es
    > >
    > >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?
    > >
    > >
    >
    >
    Prabhu Guest

  5. #4

    Default RE: .net SOAP toolkit performance for SOAP deserialization

    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
    --------------------
    >Thread-Topic: .net SOAP toolkit performance for SOAP deserialization
    >thread-index: AcTLm4C6l0/0QdSwTn+csRydbUV2eg==
    >X-WBNR-Posting-Host: 203.123.182.26
    >From: =?Utf-8?B?UHJhYmh1?= <Prabhu@discussions.microsoft.com>
    >References: <476D5BFD-4063-4233-9CE4-CA5A9EC72885@microsoft.com>
    <MmdaHD2yEHA.1884@cpmsftngxa10.phx.gbl>
    >Subject: RE: .net SOAP toolkit performance for SOAP deserialization
    >Date: Mon, 15 Nov 2004 21:17:01 -0800
    >Lines: 69
    >Message-ID: <2E47E781-8883-4AAC-82AB-8ECA3301FBFE@microsoft.com>
    >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.webservic es
    >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
    >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA01.phx.gbl!TK2MSFT NGXA03.phx.gbl
    >Xref: cpmsftngxa10.phx.gbl
    microsoft.public.dotnet.framework.aspnet.webservic es:26592
    >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservic es
    >
    >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
    >
    >
    >
    >
    >"Dan Rogers" wrote:
    >
    >> Hi,
    >>
    >> How big is the response? Are there other implementations of clients
    that
    >> deserialize more rapidly?
    >>
    >> Regards
    >>
    >> Dan Rogers
    >> Microsoft Corporation
    >> --------------------
    >> >Thread-Topic: .net SOAP toolkit performance for SOAP deserialization
    >> >thread-index: AcTIpKogGJkADvEfQymOXvVBC0AhVg==
    >> >X-WBNR-Posting-Host: 203.123.182.26
    >> >From: =?Utf-8?B?UHJhYmh1?= <Prabhu@discussions.microsoft.com>
    >> >Subject: .net SOAP toolkit performance for SOAP deserialization
    >> >Date: Fri, 12 Nov 2004 02:45:02 -0800
    >> >Lines: 15
    >> >Message-ID: <476D5BFD-4063-4233-9CE4-CA5A9EC72885@microsoft.com>
    >> >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.webservic es
    >> >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
    >> >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA03.phx.gbl
    >> >Xref: cpmsftngxa10.phx.gbl
    >> microsoft.public.dotnet.framework.aspnet.webservic es:26495
    >> >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservic es
    >> >
    >> >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?
    >> >
    >> >
    >>
    >>
    >
    Dan Rogers Guest

  6. #5

    Default RE: .net SOAP toolkit performance for SOAP deserialization

    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:operation name="getAirfareQuotes" parameterOrder="request">
    <wsdl:input name="getAirfareQuotesRequest"
    message="tns:getAirfareQuotesRequest" />
    <wsdl:output name="getAirfareQuotesResponse"
    message="tns:getAirfareQuotesResponse" />
    <wsdl:fault name="APIException" message="tns:APIException" />
    </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="apiSoapBinding" type="tns:API">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
    style="rpc" />
    <wsdl:operation name="getAirfareQuotes">
    <soap:operation 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:output name="getAirfareQuotesResponse">
    <soap:body use="encoded"
    namespace="http://someserver.com/api/services/api"
    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
    </wsdl:output>
    <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:operation>
    </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" wrote:
    > 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
    Prabhu Guest

  7. #6

    Default RE: .net SOAP toolkit performance for SOAP deserialization

    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?= <Prabhu@discussions.microsoft.com>
    >References: <476D5BFD-4063-4233-9CE4-CA5A9EC72885@microsoft.com>
    <MmdaHD2yEHA.1884@cpmsftngxa10.phx.gbl>
    <2E47E781-8883-4AAC-82AB-8ECA3301FBFE@microsoft.com>
    <LibBrNBzEHA.3436@cpmsftngxa10.phx.gbl>
    >Subject: RE: .net SOAP toolkit performance for SOAP deserialization
    >Date: Tue, 16 Nov 2004 22:25:02 -0800
    >Lines: 380
    >Message-ID: <6836D7E7-EC45-42F4-BA21-92F442B996B7@microsoft.com>
    >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.webservic es
    >NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.1.29
    >Path: cpmsftngxa10.phx.gbl!TK2MSFTNGXA01.phx.gbl!TK2MSFT NGXA03.phx.gbl
    >Xref: cpmsftngxa10.phx.gbl
    microsoft.public.dotnet.framework.aspnet.webservic es:26656
    >X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webservic es
    >
    >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:operation name="getAirfareQuotes" parameterOrder="request">
    > <wsdl:input name="getAirfareQuotesRequest"
    >message="tns:getAirfareQuotesRequest" />
    > <wsdl:output name="getAirfareQuotesResponse"
    >message="tns:getAirfareQuotesResponse" />
    > <wsdl:fault name="APIException" message="tns:APIException" />
    > </wsdl:operation>
    > </wsdl:portType>
    > <wsdl:binding name="apiSoapBinding" type="tns:API">
    > <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
    >style="rpc" />
    > <wsdl:operation name="getAirfareQuotes">
    > <soap:operation 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:output name="getAirfareQuotesResponse">
    > <soap:body use="encoded"
    >namespace="http://someserver.com/api/services/api"
    >encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
    > </wsdl:output>
    > <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:operation>
    > </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" wrote:
    >
    >> 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
    >
    >
    Dan Rogers Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139