Salve Ragazzi,
chiedo aiuto a qualche uomo di buona volontà che all'interno della community ha più esperienza di me con l'uso dei webservice e soprattutto abbia voglia e tempo per darmi un suggerimento utile a risolvere un problema su cui sto perdendo la testa da qualche giorno.
Ho la necessità di utilizzare un servizio SOAP che referenzio all'interno del mio applicativo e che serve ad inserire in un database i nominativi dei Clienti di un gestionale. Il WSDL espone un metodo che serve a compiere quest'azione (inserisciCliente) e che accetta come parametri di ingresso due oggetti: un header (contenente alcuni valori necessari ad identificare l'azione che si vuole compiere) e un oggetto di tipo "cliente" che contiene tutti i campi utili ad identificare i dati del cliente (nome, cognome, indirizzo, ecc ecc).
IL WSDL è il seguente:
codice:<?xml version = '1.0' encoding = 'UTF-8'?><definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://URL/" name="GestioneClientiWSTrs" targetNamespace="http://URL/"> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://URL/" elementFormDefault="qualified"> <complexType name="HeaderOperazione"> <sequence> <element name="val_01" type="string"/> <element name="val_02" type="string"/> <element name="val_03" type="string"/> </sequence> </complexType> <complexType name="EsitoBean"> <sequence> <element name="esito" type="int"/> <element name="listaErrori" type="tns:ArrayOfMessaggioBean"/> <element name="listaMessaggi" type="tns:ArrayOfMessaggioBean"/> </sequence> </complexType> <complexType name="ArrayOfMessaggioBean"> <complexContent> <restriction base="soap11-enc:Array"> <sequence> <element name="item" type="tns:MessaggioBean"/> </sequence> <attribute ref="soap11-enc:arrayType" wsdl:arrayType="tns:MessaggioBean[]"/> </restriction> </complexContent> </complexType> <complexType name="MessaggioBean"> <sequence> <element name="area" type="string"/> <element name="codice" type="string"/> <element name="descr" type="string"/> </sequence> </complexType> <complexType name="ArrayOfClienti"> <complexContent> <restriction base="soap11-enc:Array"> <sequence> <element name="item" type="tns:Clienti"/> </sequence> <attribute ref="soap11-enc:arrayType" wsdl:arrayType="tns:Clienti[]"/> </restriction> </complexContent> </complexType> <complexType name="Clienti"> <complexContent> <extension base="tns:ClienteDettaglio"> <sequence> <element name="codiceStrongCliente" type="string"/> <element name="codiceCliente" type="string"/> </sequence> </extension> </complexContent> </complexType> <complexType name="ClienteDettaglio"> <sequence> <element name="nome" type="string"/> <element name="cognome" type="string"/> <element name="codiceFiscale" type="string"/> <element name="indirizzo" type="string"/> </sequence> </complexType> <complexType name="OutputInserisciCliente"> <complexContent> <extension base="tns:EsitoBean"> <sequence> <element name="Clienti" type="tns:Clienti"/> </sequence> </extension> </complexContent> </complexType> <complexType name="InputInserisciCliente"> <sequence> <element name="cliente" type="tns:ClienteDettaglio"/> </sequence> </complexType> </schema> </types> <message name="GestioneClientiWSTrs_inserisciCliente"> <part name="headerOperazione" type="tns:HeaderOperazione"/> <part name="theInput" type="tns:InputInserisciCliente"/> </message> <message name="GestioneClientiWSTrs_inserisciClienteResponse"> <part name="result" type="tns:OutputInserisciCliente"/> </message> <portType name="GestioneClientiWSTrs"> <operation name="inserisciCliente" parameterOrder="headerOperazione theInput"> <input message="tns:GestioneClientiWSTrs_inserisciCliente"/> <output message="tns:GestioneClientiWSTrs_inserisciClienteResponse"/> </operation> </portType> <binding name="GestioneClientiWSTrsSoapHttp" type="tns:GestioneClientiWSTrs"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="inserisciCliente"> <soap:operation soapAction="http://URL"/> <input> <soap:body use="encoded" namespace="http://URL/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" parts="headerOperazione theInput"/> </input> <output> <soap:body use="encoded" namespace="http://URL" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" parts="result"/> </output> </operation> </binding> <service name="GestioneClientiWSTrs"> <port name="GestioneClientiWSTrsSoapHttpPort" binding="tns:GestioneClientiWSTrsSoapHttp"> <soap:address location="http://URLSERVIZIO"/> </port> </service> </definitions>
Per inserire un nuovo cliente uso una sintassi del genere:
codice:mio.webservice.HeaderOperazione mioHead = new mio.webservice.HeaderOperazione(); mioHead.val_01 = "valore01"; mioHead.val_02 = "valore02"; mioHead.val_03 = "valore03"; mio.webservice.InputInserisciCliente ClienteInput = new mio.webservice.InputInserisciCliente(); ClienteInput.cliente = new it.istruzione.pubblica.wssidi1coll.ClienteDettaglio(); ClienteInput.cliente.nome = "Nome Cliente"; ClienteInput.cliente.cognome = "Cognome Cliente"; ClienteInput.cliente.codiceFiscale = "CODFIS"; ClienteInput.cliente.indirizzo = "Indirizzo Cliente"; mio.webservice.GestioneClientiWSTrs GestioneClienti = new mio.webservice.GestioneClientiWSTrs(); GestioneClienti.Credentials = new NetworkCredential("miousername", "miapassword");
A questo punto dovrei richiamare il metodo dell'oggetto GestioneClienti denominato InputInserisciCliente che a sua volta dovrebbe restituire un oggetto di tipo OutputInserisciCliente all'interno del quale si trovano valori come esito (di tipo int con 0 per azione non eseguita e 1 per azione eseguita) listaErrori e listaMessaggi (di tipo array). In poche parole la sintassi dovrebbe essere qualcosa del tipo:
codice:mio.webservice.OutputInserisciCliente OutputCliente = GestioneClienti.InputInserisciCliente(mioHead, ClienteInput);
Fino a qui nessun problema, l'inserimento viene eseguito correttamente ma quando richiama ma quando richiamo i campi di OutputCliente con una sintassi del tipo
codice:Response.Write(OutputCliente.Esito.Tostring()
i valori sono sempre nulli (il tipo int è sempre 0 e gli array sono sempre vuoti). Per essere sicuro che il webservice effettivamente restituisse il un XML contenente i dati ho provato ad usare uno sniffer (SOAPuI) ed infatti i valori di ritorno sono regolarmente presenti. Dove sbaglio???
Anticipatamente Grazie a tutti coloro che vorranno rispondermi e Tanti Auguri di Buon Fine 2013 e di uno Splendido 2014 a tutta la board!!
P.S.
Questo l'XML che visualizzo con SOAPuI
codice:<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://URL/"> <env:Body> <ns0:inserisciClienteResponse env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <result href="#ID1"/> </ns0:inserisciClienteResponse> <ns0:OutputInserisciCliente id="ID1" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns0:OutputInserisciCliente"> <ns0:esito xsi:type="xsd:int">0</ns0:esito> <ns0:listaErrori href="#ID2"/> <ns0:listaMessaggi xsi:type="ns0:ArrayOfMessaggioBean" ans1:arrayType="ns0:MessaggioBean[0]" xsi:nil="1" xmlns:ans1="http://schemas.xmlsoap.org/soap/encoding/"/> <ns0:ClienteDettaglio href="#ID3"/> </ns0:OutputInserisciCliente> <ns0:ArrayOfMessaggioBean id="ID2" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ans1:Array" ans1:arrayType="ns0:MessaggioBean[1]" xmlns:ans1="http://schemas.xmlsoap.org/soap/encoding/"> <item href="#ID4"/> </ns0:ArrayOfMessaggioBean> <ns0:ClienteDettaglio id="ID3" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns0:SedeSidi"> <ns0:nome xsi:type="xsd:string">Nome Cliente</ns0:nome> <ns0:cognome xsi:type="xsd:string">Cognome Cliente</ns0:cognome> <ns0:idcliente xsi:type="xsd:string">ID Cliente</ns0:idcliente> </ns0:ClienteDettaglio> <ns0:MessaggioBean id="ID4" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns0:MessaggioBean"> <ns0:area xsi:type="xsd:string">AREA</ns0:area> <ns0:codice xsi:type="xsd:string">CODICE</ns0:codice> <ns0:descr xsi:type="xsd:string">TIPOERRORE</ns0:descr> </ns0:MessaggioBean> </env:Body> </env:Envelope>


Rispondi quotando
