[英]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};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.