Invio Xml

martedì 29 ottobre 2013 - 12.34

LuigiJin9 Profilo | Newbie

Buongiorno, devo inviare un file xml tramite un web service,
il web service ha il seguente metodo:
int importFxml (string bkXml)

come posso fare?
E' la prima volta che faccio una cosa del genere quindi mi servirebbe un esempio di script da poter utilizzare per risolvere il mio problema.
Grazie

Cercando un pò on line ho trovato questo script.


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ma dove definisco il nome del servizio importFxml??

0v3rCl0ck Profilo | Guru

Ciao, chi offre il servizio ti da a disposizione un WSDL? Che protocollo utilizza il servizio? SOAP?



Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin9 Profilo | Newbie

Ciao, chi offre il servizio ti da a disposizione un WSDL? Che protocollo utilizza il servizio? SOAP?

Si il servizio disponse du un wsdl, purtroppo le altre cose non so di preciso

0v3rCl0ck Profilo | Guru

con un WSDL il metodo più facile e veloce è quello di utilizzare direttamente visual studio per farti generare le classi di accesso RPC al web service.

Clicca sul progetto, poi Project -> Add Service Reference, oppure direttamente dal context menu su References:


658x333 18Kb


Digita l'indirizzo del servizio che espone il wsdl e premi Go. A volte devi mettere il percorso esatto a cui risponde il server manando il wsdl, che spesso è l'indirizzo + ?wsdl esempio: http:/services.mydomain.com/theservice/?wsdl

In questo modo visual studio ti crea le classi di accesso al servizio, in cui troverai tutti i metodi presenti nel servizio e che potrai richiamare direttamente da codice.


631x511 8Kb



Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin9 Profilo | Newbie

Ok grazie, provo a fare cosi.

0v3rCl0ck Profilo | Guru

intanto ti allego anche un esempio in vs2012 con winform + servizio wcf che espone appunto un wsdl.



Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin Profilo | Newbie

Buongiorno,
come faccio a creare la struttura per il client partendo da un WSLD?

0v3rCl0ck Profilo | Guru

dici partendo da un WSDL senza avere l'indirizzo web?



Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin Profilo | Newbie

Mi spiego meglio, ho sia il file che l'indirizzo, nel mio visual studio aggiunto il riferimento e accedo al metodo esposto.
Ma la persona che sviluppa il servizio mi da questa risposta:

"Dovrebbe verificare se con l’applicazione da lei utilizzata per lo sviluppo è presente un wizard o un tool che partendo dal WSDL riesca a creare tutta la struttura per il client."

ma sinceramente non so cosa significa e come fare

0v3rCl0ck Profilo | Guru

è proprio quello che hai fatto hai utilizzato il wizard di visual studio che ti ha creato tutta la struttura client per accedere al servizio. Quando utilizzi il client generato da visual studio stai effettivamente utilizzando delle classi scritte e compilate, che però ha generato visual studio per te, e che rispecchiano perfettamente il contratto stipulato con la terza parte attraverso il WSDL. Quindi oltre hai metodi, vengono generati anche tutti i modelli entità che puoi scambiare attraverso il servizio.


Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin Profilo | Newbie

Grazie per la disponibilità ma non so proprio come procedere, facendo delle prove mi genera quest'errore:

1710x663 129Kb

0v3rCl0ck Profilo | Guru

quindi gli step che ti ho mandato li hai seguiti? hai quindi creato il client web service in quel namespace che vedo (ServiceReferenceIveco)?

giusto per saperlo, utilizzi visual studio 2012 in c#?

intanto dall'errore che ti restituisce posso intendere che il servizio è stato sviluppato in java, ma questo non dovrebbe crearci problemi se utilizzano un protocollo standard SOAP, alla peggio bisogna cambiare qualche configurazione per farli parlare correttamente, ma è presto per dirlo, il tuo problema forse sta nel parametro che gli passi, perchè l'errore che ti restituiscono è di NullPointerException, quindi temo che gli stai passando un basketXml a null, è possibile? oppure se glie lo stai passando correttamente bisogna capire come mai loro restituiscono quell'errore, e bisogna chiedere a loro cosa c'è che non va nella chiamata che fai.

intanto dimmi se il parametro basketXml che gli stai mandando è valorizzata o l'hai lasciata a null


Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin Profilo | Newbie

Microsoft Visual Web Developer 2010 c#, il valore non è impostato a nullo.

protected void Page_Load(object sender, EventArgs e) { CarrelloPowerEngineService ImpCarrello = new CarrelloPowerEngineService(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(HttpContext.Current.Server.MapPath(".") + "\\Prova1.XML"); StringBuilder rawXml = new StringBuilder(); rawXml.Append(GetXmlString(xmlDoc)); int result=ImpCarrello.importBasket(rawXml.ToString()); Response.Write(result); } static string GetXmlString(XmlDocument xmlDoc) { StringWriter sw = new StringWriter(); XmlTextWriter xw = new XmlTextWriter(sw); xmlDoc.WriteTo(xw); return sw.ToString(); }

0v3rCl0ck Profilo | Guru

Prima di contattare loro intanto prova a vedere come wcf sta componendo il messaggio per te abilitando il tracing.

Per abilitare il tracing devi modificare il file di configurazione dell'applicazione (web.config / app.config) e aggiungere una sezione diagnostic sotto <configuration> e sempre una sezione diagnostic però sotto <system.serviceModel>:

all'interno di <configuration>
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

all'interno di <system.serviceModel>:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ecco un esempio completo di file di configurazione:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

questo ti produrrà un file app_messages.svclog, nel caso di un app winform/console/service dentro alla folder bin, nel caso di una webapp dentro alla cartella root del sito.

se non vedi il file prova a specificare un path assoluto dove IIS ha i permessi, modificando la proprietà initializeData="app_messages.svclog" dello sharedListeners:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

dovresti potere aprire il file app_messages.svclog facendo semplicemente doppio click, e ti si apre il tracer viewer di wcf, se non si apre dovresti trovarlo sotto:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\SvcTraceViewer.exe"
oppure
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcTraceViewer.exe"
oppure
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\SvcTraceViewer.exe"

in base all'sdk che hai installato.

e ti troverai con qualcosa di simile:


960x754 44Kb


se il messaggio ti sembra corretto puoi chiedere al fornitore di servizi come mai ti rispondono con quell'eccezione e capire cosa c'è nella tua chiamata che non va...



Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic

LuigiJin Profilo | Newbie

Grazie mille per la disponibilità, inviato il msg di errore al fornitore del servizio, aspetto una sua risposta in merito.

0v3rCl0ck Profilo | Guru

sei poi riuscito a risolvere il problema?



Michael Denny
Lead Software Developer & Solutions Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5