在 C# 中调用具有复杂类型的 SOAP API

Calling SOAP API with Complex Type in C#

我是 .Net 的新手,所以如果我的问题定义不准确,我提前道歉。

我正在尝试使用 SOAP Web 服务,但在为名为 deliveryRoutingRequestEntries 的元素构造复杂类型时遇到问题。

我已经使用服务参考添加了 WSDL,这是 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>

这是我调用 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);

    }
}

我遇到的问题是我无法将客户、地址和包裹添加到 objRoutingRequest,以便将其包含在请求中。

希望这是有道理的,如果需要更多信息,请告诉我。

(把答案移到这里:)
您在 : objRoutingRequest.deliveryRoutingRequestEntries = objReqEntry;,
处遇到错误 你应该作为数组传递:
objRoutingRequest.deliveryRoutingRequestEntries = new [] {objReqEntry};