Котировка цены Estes Express Api Версии 4.0

#c# #webapi #shipping

#c# #webapi #Доставка

Вопрос:

Я пытаюсь протестировать API экспресс-перевозок Estes и столкнулся с проблемой. У меня настроен объект запроса (и я получаю ожидаемый ответ на ошибку), за исключением товарной части. Там wsdl не включает прямое соответствие, такое как товар, базовый товар или полные товары в их классе запроса, а просто указывает элемент в качестве типа объекта.

 ```       [System.Xml.Serialization.XmlElementAttribute("baseCommodities",   typeof(BaseCommoditiesType))]  [System.Xml.Serialization.XmlElementAttribute("fullCommodities",   typeof(FullCommoditiesType))]  public object Item {  get {  return this.itemField;  }  set {  this.itemField = value;  }  }  [System.Xml.Serialization.XmlElement("commodity", typeof(FullCommodityType))]//added to request class recently    public object Items  {  get  {  return this.itemsField;  }  set  {  this.itemsField = value;  }  }     ```  

Вот мой код до сих пор. Я попробовал несколько вещей, которые заканчиваются тем, что не был создан xml-документ. Я не понимаю, как добавить товар и полные товарные позиции в объект запроса. Теперь, когда я взломал, все, что мне нужно сделать, это обернуть элемент «Товары» вокруг элемента «товар». Это мой единственный вопрос сейчас.

   static void Main(string[] args)  {  RateQuoteService service = new RateQuoteService() ;   AuthenticationType authentication = new AuthenticationType();  authentication.user = "xxxxxxxx";  authentication.password = "xxxxxx";  service.auth = authentication;   rateRequest request = new rateRequest();  rateQuote quote = new rateQuote();    request.requestID = generateID();//just guid value for now    request.account = "xxxxxxx";   PointType origin = new PointType();  origin.city = "Shelby TownShip";  origin.postalCode = "48315";  origin.stateProvince = "MI";  origin.countryCode = "US";  request.originPoint = origin;   PointType destination = new PointType();  destination.city = "Fenton";  destination.postalCode = "48430";  destination.stateProvince = "MI";  destination.countryCode = "US";  request.destinationPoint = destination;   request.payor = "S";  request.terms = "P";   PickupType pickUP = new PickupType();  request.pickup = pickUP;  request.declaredValue = 1000.00M;  request.declaredValueSpecified = true;    request.stackable = YesNoBlankType.N;//enum  request.stackableSpecified = true;  request.linearFeet = "80";  request.foodWarehouse = "other";   request.declaredValueWaived = YesNoBlankType.N;//enum  request.declaredValueWaivedSpecified = true;    FullCommoditiesType fcom = new FullCommoditiesType();//just commodity property  FullCommodityType fcomtypes = new FullCommodityType();//all other properties    DimensionsType dim = new DimensionsType();  dim.length = "75";  dim.width = "50";  dim.height = "25";   fcomtypes.@class = 70.0M;  fcomtypes.weight = "500";  fcomtypes.pieces = "2";  fcomtypes.pieceType = PackagingType.PT;  fcomtypes.classSpecified = true;  fcomtypes.dimensions = dim;    //fcom.commodity = ????  //request.Item = ????//I'm assuming fcomtypes but dosent work  request.Items = fcomtypes; //Hack - Now this adds what I need to the request object    //request.Item = fcomtypes as FullCommodityType;//dont work either   quote = service.getQuote(request);              }   

XML generated:

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"gt;  lt;soap:Headergt;  lt;auth xmlns="http://ws.estesexpress.com/ratequote"gt;  lt;usergt;xxxxxxlt;/usergt;  lt;passwordgt;xxxxxxxxlt;/passwordgt;  lt;/authgt;  lt;/soap:Headergt;  lt;soap:Bodygt;  lt;rateRequest xmlns="http://ws.estesexpress.com/schema/2019/01/ratequote"gt;  lt;requestIDgt;5fdbdbeedf474a439a54559750c2c5ealt;/requestIDgt;  lt;accountgt;xxxxxxxlt;/accountgt;  lt;originPointgt;  lt;countryCodegt;USlt;/countryCodegt;  lt;postalCodegt;48315lt;/postalCodegt;  lt;citygt;Shelby TownShiplt;/citygt;  lt;stateProvincegt;MIlt;/stateProvincegt;  lt;/originPointgt;  lt;destinationPointgt;  lt;countryCodegt;USlt;/countryCodegt;  lt;postalCodegt;48430lt;/postalCodegt;  lt;citygt;Fentonlt;/citygt;  lt;stateProvincegt;MIlt;/stateProvincegt;  lt;/destinationPointgt;  lt;payorgt;Slt;/payorgt;  lt;termsgt;Plt;/termsgt;  lt;pickupgt;  lt;dategt;0001-01-01lt;/dategt;  lt;/pickupgt;  lt;declaredValuegt;1000.00lt;/declaredValuegt;  lt;declaredValueWaivedgt;Nlt;/declaredValueWaivedgt;  lt;stackablegt;Nlt;/stackablegt;  lt;linearFeetgt;80lt;/linearFeetgt;  lt;foodWarehousegt;otherlt;/foodWarehousegt;  lt;commoditygt;  lt;classgt;70.0lt;/classgt;  lt;weightgt;500lt;/weightgt;  lt;piecesgt;2lt;/piecesgt;  lt;pieceTypegt;PTlt;/pieceTypegt;  lt;dimensionsgt;  lt;lengthgt;75lt;/lengthgt;  lt;widthgt;50lt;/widthgt;  lt;heightgt;25lt;/heightgt;  lt;/dimensionsgt;  lt;descriptiongt;testlt;/descriptiongt;  lt;/commoditygt;  lt;/rateRequestgt;  lt;/soap:Bodygt; lt;/soap:Envelopegt;  

Ожидаемый Возврат Неисправности:

 lt;?xml version='1.0' encoding='utf-8'?gt; lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"gt;  lt;soapenv:Header/gt;  lt;soapenv:Bodygt;  lt;soapenv:Faultgt;  lt;faultcodegt;soapenv:Serverlt;/faultcodegt;  lt;faultstringgt;Schema validation errorlt;/faultstringgt;  lt;detailgt;  lt;rat:schemaError xmlns:rat="http://ws.estesexpress.com/ratequote"gt;  lt;rat:errorgt;Expected elements 'baseCommodities@http://ws.estesexpress.com/schema/2019/01/ratequote fullCommodities@http://ws.estesexpress.com/schema/2019/01/ratequote' before the end of the content in element rateRequest@http://ws.estesexpress.com/schema/2019/01/ratequotelt;/rat:errorgt;  lt;rat:errorgt;Expected elements 'baseCommodities@http://ws.estesexpress.com/schema/2019/01/ratequote fullCommodities@http://ws.estesexpress.com/schema/2019/01/ratequote' instead of 'commodity@http://ws.estesexpress.com/schema/2019/01/ratequote' here in element rateRequest@http://ws.estesexpress.com/schema/2019/01/ratequotelt;/rat:errorgt;  lt;/rat:schemaErrorgt;  lt;/detailgt;  lt;/soapenv:Faultgt;  lt;/soapenv:Bodygt; lt;/soapenv:Envelopegt;  

Ответ №1:

Я бы создал такой список, как:

 Listlt;FullCommodityTypegt; productDesc = new Listlt;FullCommodityTypegt;();    productDesc.Add(new FullCommodityType()  {  @class = 70,  classSpecified = true,  weight = "500",  pieces = "2",  pieceType = PackagingType.PT,   dimensions = dim  });   Listlt;FullCommoditiesTypegt; products = new Listlt;FullCommoditiesTypegt;();   products.Add(new FullCommoditiesType()  {  commodity = productDesc.ToArray()   });    request.Item = products[0];  

И вам, вероятно, следует добавить дату получения, иначе вы получите неизвестную ошибку.