2015-04-10 3 views
0

Я новичок в .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, чтобы он мог быть включен в запрос.

Надеюсь, это имеет смысл, дайте мне знать, если потребуется дополнительная информация.

+0

Вы получили ошибку в 'objRoutingRequest.deliveryRoutingRequestEntries = objReqEntry;', я думаю ему нужен массив, вы должны передать его как массив: objRoutingRequest.deliveryRoutingRequestEntries = new [] {objReqEntry}; – nhabuiduc

+0

@nhabuiduc, который сделал трюк .... Спасибо !! – jrobinson6274

ответ

0

(Просто переместите ответ здесь :)
Вы получили ошибку в: objRoutingRequest.deliveryRoutingRequestEntries = objReqEntry;,
вы должны передать как массив:
objRoutingRequest.deliveryRoutingRequestEntries = new [] {objReqEntry};