Search code examples
c#web-servicessoapwsdl

Calling SOAP API with Complex Type in C#


I'm new to .Net, so I apologize in advance if the definition of my problem is not accurate.

I'm attempting to consume a SOAP Web Service and I'm having a problem constructing complex type for an element called deliveryRoutingRequestEntries.

I have added the WSDL using the Service Reference, here is part of the WSDL:

<wsdl:operation name="validateDeliveryAddress">
  <soap:operation soapAction="" style="document" />
  <wsdl:input name="validateDeliveryAddress">
    <soap:body use="literal" />
  </wsdl:input>
  <wsdl:output name="validateDeliveryAddressResponse">
    <soap:body use="literal" />
  </wsdl:output>
</wsdl:operation>

  <xs:complexType name="deliveryRoutingRequestEntries">
    <xs:sequence>
      <xs:element maxOccurs="unbounded" name="deliveryRoutingRequestEntry" type="tns:delRoutingRequestEntry" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="delRoutingRequestEntry">
    <xs:sequence>
      <xs:element minOccurs="0" name="addressValidationRequired" type="xs:boolean" />
      <xs:element name="customer" type="tns:customer" />
      <xs:element name="parcel" type="tns:parcel" />
      <xs:element minOccurs="0" name="services" type="tns:services" />
      <xs:element minOccurs="0" name="senderAddress" type="tns:senderAddress" />
      <xs:element minOccurs="0" name="productCode" type="xs:decimal" />
      <xs:element name="expectedDespatchDate" type="xs:date" />
      <xs:element minOccurs="0" name="requiredDate" type="xs:date" />
      <xs:element minOccurs="0" name="countryOfOrigin" type="xs:string" />
      <xs:element minOccurs="0" name="warehouseNo" type="xs:decimal" />
      <xs:element minOccurs="0" name="carrierCode" type="xs:string" />
      <xs:element minOccurs="0" name="deliveryMethod" type="xs:string" />
      <xs:element minOccurs="0" name="multiplePartsId" type="xs:string" />
    </xs:sequence>
  </xs:complexType>

Here is my attempt to call the validateDeliveryAddress:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HermesWebService;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        RoutingWebServiceClient objHermesWebService = new RoutingWebServiceClient();
        objHermesWebService.ClientCredentials.UserName.UserName = "abababab";
        objHermesWebService.ClientCredentials.UserName.Password = "abababab";

        deliveryRoutingRequest objRoutingRequest = new deliveryRoutingRequest();
        objRoutingRequest.clientId = "ABAB";
        objRoutingRequest.clientName = "ABAB";
        objRoutingRequest.userId = "ABABAB";
        objRoutingRequest.sourceOfRequest = "ABABAB";

        delRoutingRequestEntry objReqEntry = new delRoutingRequestEntry();

        customer objCust = new customer();
        objCust.customerReference1 = "12345";

        address objadr = new address();
        objadr.streetName = "7 Bridge Street";
        objadr.addressLine1 = "London Heathrow Airport";
        objadr.city = "London";
        objadr.region = "Hounslow";
        objadr.postCode = "ABA ABA";
        objadr.countryCode = "GB";

        parcel objpcl = new parcel();
        objpcl.weight = 100;
        objpcl.length = 0;
        objpcl.width = 0;
        objpcl.depth = 0;
        objpcl.girth = 0;
        objpcl.combinedDimension = 0;

        objCust.address = objadr;
        objReqEntry.customer = objCust;
        objReqEntry.parcel = objpcl;

        objRoutingRequest.deliveryRoutingRequestEntries = objReqEntry; (I receive an error here stating: Cannot implicitly convert type 'HermesWebService.delRoutingRequestEntry' to 'HermesWebService.delRoutingRequestEntry[]')

        var x = objHermesWebService.validateDeliveryAddress(objRoutingRequest);

    }
}

The problem I have is I can't add the Customer, Address and Parcel to the objRoutingRequest so it can be included in the request.

Hope this makes some sense, let me know if additional information is needed.


Solution

  • (Just move answer here:)
    You got error at : objRoutingRequest.deliveryRoutingRequestEntries = objReqEntry;,
    you should pass as array:
    objRoutingRequest.deliveryRoutingRequestEntries = new [] {objReqEntry};