Solved

C# web service client fails on array returned by Perl app server with "There is an error in XML document (1, 505)."

Posted on 2004-09-18
2
931 Views
Last Modified: 2013-11-19
I am having problems talking to a Perl based application server - functions for finding orders and retrieving details work, but updates, while applied to the database by the app server, return an array which .NET doesn't like:

There is an error in XML document (1, 505).
The specified type was not recognized: name='TUpdateOrder_Return', namespace='http://namespaces.soaplite.com/perl', at <Orders xmlns=''>.

I have read elsewhere that arrays may cause problems but I have no control over what the web service returns. SOAPscope says:

soapenc:arrayType attribute found in soap:Body
The WS-I requires that encoded arrays not be used in SOAP messages. They can cause interroperability problems due to the ambiguity of the spec. Change the way you encode your messages from Encoded to Literal.

Element has soap:encodingStyle attribute
The WS-I requires that all SOAP messages be literal and not encoded. Encoded messages are indicated by the soap:encodingStyle attribute appearing in the message. The style of encoding is indicated by the value of the attribute. A literal message is indicated by the lack of the soap:encodingStyle attribute. Configure your SOAP stack to serialize literal messages instead of encoded messages. There should not be a soap:encodingStyle attribute anywhere on the message envelope.

Request (Pseudocode):

update
(
   TUpdateOrder_Input Item[0]
   {
      string OrderNo = "040918-1002",
      TOrderUpdateData OrderData
      {
         boolean isShelved = false,
         boolean isCanceled = false
      }
   }
)

Response (Pseudocode):

Array Orders
{
   TUpdateOrder_Return Order[0]
   {
      string OrderNo = "040918-1002",
      boolean updated = true
   }
}

Request (XML):

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
   xmlns:tns="urn://epages.de/WebServices/OrderService/2004/08"
   xmlns:types="urn://epages.de/WebServices/OrderService/2004/08/encodedTypes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <tns:update>
         <Orders href="#id1"/>
      </tns:update>
      <soapenc:Array id="id1" soapenc:arrayType="tns:TUpdateOrder_Input[1]">
         <Item href="#id2"/>
      </soapenc:Array>
      <tns:TUpdateOrder_Input id="id2" xsi:type="tns:TUpdateOrder_Input">
         <OrderNo xsi:type="xsd:string">040918-1002</OrderNo>
         <OrderData href="#id3"/>
      </tns:TUpdateOrder_Input>
      <tns:TOrderUpdateData id="id3" xsi:type="tns:TOrderUpdateData">
         <isShelved xsi:type="xsd:boolean">false</isShelved>
         <isCanceled xsi:type="xsd:boolean">false</isCanceled>
      </tns:TOrderUpdateData>
   </soap:Body>
</soap:Envelope>

Response (XML):

<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:namesp164="http://namespaces.soaplite.com/perl"><SOAP-ENV:Body><namesp163:updateResponse xmlns:namesp163="urn://epages.de/WebServices/OrderService/2004/08"><Orders xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="namesp164:TUpdateOrder_Return[1]"><Order xsi:type="namesp164:TUpdateOrder_Return"><OrderNo xsi:type="xsd:string">040918-1002</OrderNo><updated xsi:type="xsd:boolean">true</updated></Order></Orders></namesp163:updateResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

WSDL:

<wsdl:definitions xmlns:tns="urn://epages.de/WebServices/OrderService/2004/08" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn://epages.de/WebServices/OrderService/2004/08" name="OrderService">
    <documentation>this is a web service for an epages e-commerce system. this service is a container for all order pending methods</documentation>
    <wsdl:types>
        <xs:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn://epages.de/WebServices/OrderService/2004/08">
            <xs:complexType name="TSimpleOrder">
                <xs:annotation>
                    <xs:documentation>a simple order structure</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>epages order no (e.g. "031231-1001")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CustomerNo" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>epages customer no (e.g. "1001")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="TotalPrice" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>total price of this order (e.g. 123.95)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TListOfSimpleOrders">
                <xs:annotation>
                    <xs:documentation>a list of simple orders</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TSimpleOrder[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="TShippingMethod">
                <xs:annotation>
                    <xs:documentation>a shipping method</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="Name" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>name of a shipping method (e.g. "UPS Express")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="SellingPrice" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>costs for this shipping (e.g. 3.50)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Tax" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>tax in percent (e.g. 16.0)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TItem">
                <xs:annotation>
                    <xs:documentation>a single PackingSlip item</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="Position" type="xs:integer" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>item position in this order/invoice/packingslip</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ProductNo" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>epages ProductNo (e.g. "10700")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ProductName" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>product name</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="PurchasePrice" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>purchase price of product (e.g. 45.00)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="SellingPrice" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>actual selling price of product. depending of your settings in the storeadmin, this ist gross or net (e.g. 59.95)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Tax" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>tax for this product, in percent (e.g. 16.0)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Unit" type="xs:integer">
                        <xs:annotation>
                            <xs:documentation>a unit id of your epages system</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Quantity" type="xs:integer">
                        <xs:annotation>
                            <xs:documentation>count of items for this position</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isShipping" type="xs:boolean">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this position is the shipping part of the order/inovice/packingslip</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TListOfItems">
                <xs:annotation>
                    <xs:documentation>a list of order items</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TItem[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="TAddress">
                <xs:annotation>
                    <xs:documentation>a address</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="Name" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>Customer Name (e.g. "Carl C. Ustomer")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Name2" type="xs:string"/>
                    <xs:element name="Name3" type="xs:string"/>
                    <xs:element name="Street" type="xs:string"/>
                    <xs:element name="City" type="xs:string"/>
                    <xs:element name="ZipCode" type="xs:string"/>
                    <xs:element name="State" type="xs:string"/>
                    <xs:element name="Country" type="xs:string"/>
                    <xs:element name="Phone" type="xs:string"/>
                    <xs:element name="Phone2" type="xs:string"/>
                    <xs:element name="Fax" type="xs:string"/>
                    <xs:element name="eMail" type="xs:string"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TOrderData">
                <xs:annotation>
                    <xs:documentation>a order structure</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="Date" type="xs:date">
                        <xs:annotation>
                            <xs:documentation>creation date (e.g. "2003-06-18")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CustomerNo" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>epages customer no (e.g. "1001")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="TotalPrice" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>total price of this order (e.g. 123.95)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="TaxAmount" type="xs:decimal">
                        <xs:annotation>
                            <xs:documentation>Tax as money amount, not percent (e.g. 23.84)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isTaxable" type="xs:boolean">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is taxable (tax charge)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isShelved" type="xs:boolean">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is shelved (or adacta)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isCanceled" type="xs:boolean">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is canceled</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ShippingMethod" type="tns:TShippingMethod"/>
                    <xs:element name="PaymentMethod" type="xs:integer">
                        <xs:annotation>
                            <xs:documentation>an epages payment method</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="OrderComment" type="xs:string" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>comment for this order</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="BillingAddress" type="tns:TAddress">
                        <xs:annotation>
                            <xs:documentation>billing address</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="ShippingAddress" type="tns:TAddress">
                        <xs:annotation>
                            <xs:documentation>shipping address</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="OrderItems" type="tns:TListOfItems">
                        <xs:annotation>
                            <xs:documentation>list of postions of this order</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TOrderUpdateData">
                <xs:annotation>
                    <xs:documentation>a order structure (for update)</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="isShelved" type="xs:boolean" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is shelved (or adacta)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isCanceled" type="xs:boolean" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is canceled (warning, this is not recoverable. once canceled orders, can not be 'uncanceled'.)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TError">
                <xs:annotation>
                    <xs:documentation>an error object</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="Code" type="xs:integer">
                        <xs:annotation>
                            <xs:documentation>an numeric error code</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="Message" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>a short error message as description</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <!--Input Arguments-->
            <xs:complexType name="TCreateOrder_Input">
                <xs:annotation>
                    <xs:documentation>Input Arguments of a single Create Order Call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string" minOccurs="0"/>
                    <xs:element name="OrderData" type="tns:TOrderData"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TUpdateOrder_Input">
                <xs:annotation>
                    <xs:documentation>Input Arguments of a single Update Order Call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string"/>
                    <xs:element name="OrderData" type="tns:TOrderUpdateData"/>
                </xs:all>
            </xs:complexType>
            <!--Calls with Simple Input Data (Exists, Delete, GetInfo)-->
            <xs:complexType name="TSimpleOrder_Input">
                <xs:annotation>
                    <xs:documentation>Input Arguments of a Simple Order Call (for Function that only need the OrderNo as Input Argument)</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TFindOrders_Input">
                <xs:annotation>
                    <xs:documentation>input arguments of a findOrders() call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="MinDate" type="xs:date" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>creation date. search for orders only _after_ this date (e.g. "2003-06-18")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="MaxDate" type="xs:date" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>creation date. search for orders only _before_ this date  (e.g. "2003-06-18")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="CustomerNo" type="xs:string" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>epages customer no (e.g. "1001")</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isShelved" type="xs:boolean" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is shelved (or adacta)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                    <xs:element name="isCanceled" type="xs:boolean" minOccurs="0">
                        <xs:annotation>
                            <xs:documentation>flag, indicating this order is canceled (warning, this is not recoverable. once canceled orders, can not be 'uncanceled'.)</xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:all>
            </xs:complexType>
            <!--Return Values-->
            <xs:complexType name="TCreateOrder_Return">
                <xs:annotation>
                    <xs:documentation>return values of a single create() Order call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="CustomerNo" type="xs:string"/>
                    <xs:element name="Date" type="xs:date"/>
                    <xs:element name="created" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="OrderNo" type="xs:string" minOccurs="0"/>
                    <xs:element name="Error" type="tns:TError" minOccurs="0"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TExistsOrder_Return">
                <xs:annotation>
                    <xs:documentation>return values of a single exists() Order call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string"/>
                    <xs:element name="exists" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="Error" type="tns:TError" minOccurs="0"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TDeleteOrder_Return">
                <xs:annotation>
                    <xs:documentation>return values of a single delete() Order call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string"/>
                    <xs:element name="deleted" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="Error" type="tns:TError" minOccurs="0"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TUpdateOrder_Return">
                <xs:annotation>
                    <xs:documentation>return values of a single update() Order call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string"/>
                    <xs:element name="updated" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="Error" type="tns:TError" minOccurs="0"/>
                </xs:all>
            </xs:complexType>
            <xs:complexType name="TGetInfo_Return">
                <xs:annotation>
                    <xs:documentation>return values of a single getInfo() Order call</xs:documentation>
                </xs:annotation>
                <xs:all>
                    <xs:element name="OrderNo" type="xs:string"/>
                    <xs:element name="OrderData" type="tns:TOrderData"/>
                    <xs:element name="Error" type="tns:TError"/>
                </xs:all>
            </xs:complexType>
            <!-- IN OUT TYPES for Messages -->
            <!-- CREATE -->
            <xs:complexType name="type_Create_In">
                <xs:annotation>
                    <xs:documentation>input structure of an create() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TCreateOrder_Input[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="type_Create_Out">
                <xs:annotation>
                    <xs:documentation>output structure of an exists() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TCreateOrder_Return[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <!-- EXISTS -->
            <xs:complexType name="type_Exists_In">
                <xs:annotation>
                    <xs:documentation>input structure of an exists() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TSimpleOrder_Input[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="type_Exists_Out">
                <xs:annotation>
                    <xs:documentation>output structure of an exists() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TExistsOrder_Return[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <!-- DELETE -->
            <xs:complexType name="type_Delete_In">
                <xs:annotation>
                    <xs:documentation>input structure of an delete() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TSimpleOrder_Input[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="type_Delete_Out">
                <xs:annotation>
                    <xs:documentation>output structure of an delete() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TDeleteOrder_Return[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <!-- UPDATE -->
            <xs:complexType name="type_Update_In">
                <xs:annotation>
                    <xs:documentation>input structure of an update() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TUpdateOrder_Input[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="type_Update_Out">
                <xs:annotation>
                    <xs:documentation>output structure of an update() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TUpdateOrder_Return[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <!-- GETINFO -->
            <xs:complexType name="type_GetInfo_In">
                <xs:annotation>
                    <xs:documentation>input structure of an getInfo() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TSimpleOrder_Input[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
            <xs:complexType name="type_GetInfo_Out">
                <xs:annotation>
                    <xs:documentation>output structure of an getInfo() Order call</xs:documentation>
                </xs:annotation>
                <xs:complexContent>
                    <xs:restriction base="soapenc:Array">
                        <xs:attribute ref="soapenc:arrayType" wsdl:arrayType="tns:TGetInfo_Return[]"/>
                    </xs:restriction>
                </xs:complexContent>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <message name="msg_Create_Input">
        <part name="Orders" type="tns:type_Create_In"/>
    </message>
    <message name="msg_Create_Output">
        <part name="Orders" type="tns:type_Create_Out"/>
    </message>
    <message name="msg_Exists_Input">
        <part name="Orders" type="tns:type_Exists_In"/>
    </message>
    <message name="msg_Exists_Output">
        <part name="Orders" type="tns:type_Exists_Out"/>
    </message>
    <message name="msg_Delete_Input">
        <part name="Orders" type="tns:type_Delete_In"/>
    </message>
    <message name="msg_Delete_Output">
        <part name="Orders" type="tns:type_Delete_Out"/>
    </message>
    <message name="msg_Update_Input">
        <part name="Orders" type="tns:type_Update_In"/>
    </message>
    <message name="msg_Update_Output">
        <part name="Orders" type="tns:type_Update_Out"/>
    </message>
    <message name="msg_GetInfo_Input">
        <part name="Orders" type="tns:type_GetInfo_In"/>
    </message>
    <message name="msg_GetInfo_Output">
        <part name="Orders" type="tns:type_GetInfo_Out"/>
    </message>
    <message name="msg_Find_Input">
        <part name="SearchCriterias" type="tns:TFindOrders_Input"/>
    </message>
    <message name="msg_Find_Output">
        <part name="Orders" type="tns:TListOfSimpleOrders"/>
    </message>
    <portType name="port_Order">
        <operation name="create">
            <documentation>create new orders. if a order no is provided, the new order is created with this id. otherwise a new order no will be generated.</documentation>
            <input message="tns:msg_Create_Input"/>
            <output message="tns:msg_Create_Output"/>
        </operation>
        <operation name="exists">
            <documentation>check if some orders exist.</documentation>
            <input message="tns:msg_Exists_Input"/>
            <output message="tns:msg_Exists_Output"/>
        </operation>
        <operation name="delete">
            <documentation>delete a list of orders.</documentation>
            <input message="tns:msg_Delete_Input"/>
            <output message="tns:msg_Delete_Output"/>
        </operation>
        <operation name="update">
            <documentation>update a list of orders.</documentation>
            <input message="tns:msg_Update_Input"/>
            <output message="tns:msg_Update_Output"/>
        </operation>
        <operation name="getInfo">
            <documentation>get information about a list of orders.</documentation>
            <input message="tns:msg_GetInfo_Input"/>
            <output message="tns:msg_GetInfo_Output"/>
        </operation>
        <operation name="find">
            <documentation>find orders by defined search criterias</documentation>
            <input message="tns:msg_Find_Input"/>
            <output message="tns:msg_Find_Output"/>
        </operation>
    </portType>
    <binding name="bind_Order_SOAP" type="tns:port_Order">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="create">
            <soap:operation soapAction="urn://epages.de/WebServices/OrderService/2004/08#create"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </output>
        </operation>
        <operation name="exists">
            <soap:operation soapAction="urn://epages.de/WebServices/OrderService/2004/08#exists"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </output>
        </operation>
        <operation name="delete">
            <soap:operation soapAction="urn://epages.de/WebServices/OrderService/2004/08#delete"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </output>
        </operation>
        <operation name="update">
            <soap:operation soapAction="urn://epages.de/WebServices/OrderService/2004/08#update"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </output>
        </operation>
        <operation name="getInfo">
            <soap:operation soapAction="urn://epages.de/WebServices/OrderService/2004/08#getInfo"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </output>
        </operation>
        <operation name="find">
            <soap:operation soapAction="urn://epages.de/WebServices/OrderService/2004/08#find"/>
            <input>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </input>
            <output>
                <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn://epages.de/WebServices/OrderService/2004/08"/>
            </output>
        </operation>
    </binding>
    <service name="OrderService">
        <documentation>epages Order Service</documentation>
        <port name="port_Order" binding="tns:bind_Order_SOAP">
            <soap:address location="http://localhost:8080/epages/trainingstore.storefront/SOAP"/>
        </port>
    </service>
</wsdl:definitions>

0
Comment
Question by:sam_johnston
2 Comments
 
LVL 2

Accepted Solution

by:
SimonTocker earned 500 total points
ID: 12101645
You need to change the WebService, webservice interoperability is a big problem, and yes I too have read that arrays cause problems.

The main problem is that each languages implementation of web services was initially different and the only way to guarentee compatibilty is WS-I compliance.  If SoapScope tells you somethings wrong, you can be pretty sure, seeing as they are the leaders in their field, that they are right.

The only other alternative is find out how the Perl service created this service, do they conform to a specific standard and can you utilise it, I have seen some 3rd party perl webservice providers and they sell equivalent .NEt libraries for handling the messages instead of using the built in mechanisms.

Also try generating your class using Christian Weyers Contract first code generator, this may deal with the WSDL better or lastly roll your own Client and dont use the .NET libraries if you really must use this service and cant get them to change it.

http://www.thinktecture.com/Resources/Software/WSContractFirst/default.html

0
 

Author Comment

by:sam_johnston
ID: 12108191
I had feared this would be the case. I'll check out the code generator and contact the vendor.
Thanks.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This article covers the basics of the Sass, which is a CSS extension language. You will learn about variables, mixins, and nesting.
SASS allows you to treat your CSS code in a more OOP way. Let's have a look on how you can structure your code in order for it to be easily maintained and reused.
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
The viewer will learn how to dynamically set the form action using jQuery.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now