El caso es que mapeo el wsdl en Delphi7 utilizando el famoso asistente que te crea un .pas con todas las funciones, a la hora de invocar una de las funciones me salta un access violation y por mas que he investigado no se que me falte...
He leído algún comentario sobre instalar el certificado del webservice en el IE, pero lo hice y no veo que cambie algo... Ojalá algún alma caritativa me pueda ayudar.
este es el wsdl al que intento enviarle un XML -> https://cfdiws.sedeb...vices/CFDi?wsdl
Este es el código desde donde invoco una de las funciones del wsdl
procedure TFXMLFac.SBElectronicaClick(Sender: TObject); var CabeceraNode,XMLNode: IXMLNode; Res1 : TByteDynArray; Res2 : TByteDynArray; Res3 : TByteDynArray; factXML : Variant; usuario, pwd : WideString; begin usuario := 'demo'; pwd := 'demo'; CabeceraNode := XMLGenerarFacturaElectronica (XMLDocument, Now, '', DCapGen, DLingen ); showmessage (ERuta.text+DCapGen.fieldbyname ('serie').asstring+DCapGen.fieldbyname ('numero').asstring+'_'+'.xml'); XMLDocument.SaveToFile (ERuta.text+DCapGen.fieldbyname ('serie').asstring+DCapGen.fieldbyname ('numero').asstring+'_'+'.xml'); Res1 := StringToByteArray (XMLDocument.XML.Text); try Res2 := getcfdi.getCfdiTest (usuario, pwd, Res1); except raise exception.create(CFDiException.ClassName); end; end;
esta es la función que encontré para pasar el contenido del xml a formato TByteDynArray
function TFXMLFac.StringToByteArray(const Str: string): TByteDynArray; var MSTream: TMemoryStream; pTemp: pointer; begin MStream := TMemoryStream.Create; MStream.Write(str,length(str)); MStream.Position := 0; SetLength(Result, MStream.Size); pTemp := @Result[0]; MStream.Position := 0; MStream.Read(pTemp^, MStream.Size); MStream.Free; end;
Espero que mi primer post sea bien recibido y si no está en buen lugar espero un buen trato del moderador
