Я новичок в .Net, поэтому заранее извиняюсь, если определение моей проблемы неточно.Вызов API SOAP с сложным типом в C#
Я пытаюсь использовать веб-службу SOAP, и у меня возникает проблема создания сложного типа для элемента с именем deliveryRoutingRequestEntries.
Я добавил WSDL с помощью Service Reference, здесь является частью 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}; – nhabuiduc
@nhabuiduc, который сделал трюк .... Спасибо !! – jrobinson6274