167 messaggi dal 08 dicembre 2003
Buongiorno a tutti, perdonate la domanda generica ma non so proprio da dove cominciare. sono in possesso della struttura di un WSDL con relativi file XML e XSD. Dovrei implementare una piccola interfaccia per il login e per la decodifica della risposta XML, il tutto utilizzando il protocollo SOAP.
Potete suggerirmi qualche esempio pratico?
Grazie.
Modificato da boysoft il 08 dicembre 2015 10.40 - Scusate forse ho sbagliato sezione... dovevo postare in asp.net
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

boysoft ha scritto:

e per la decodifica della risposta XML, il tutto utilizzando il protocollo SOAP

Fortunatamente non dovrai fare questo lavoro a mano perché Visual Studio ti dà degli strumenti per crearti delle classi proxy che astraggono dal protocollo di comunicazione SOAP sottostante e ti permettono di lavorare invece con degli oggetti fortemente tipizzati.

Dalla casella di ricerca di Windows cerca "Prompt dei comandi" e tra le tante voci che verranno fuori clicca "Prompt dei comandi per gli sviluppatori" o "Prompt dei comandi degli strumenti di VS2015".
Se non lo trovi, segui queste indicazioni in base al tuo sistema operativo.
https://msdn.microsoft.com/it-it/library/ms229859(v=vs.110).aspx

Quando sei riuscito ad aprire il prompt dei comandi, potrai usare il tool WSDL.exe, che trovi documentato qui:
https://msdn.microsoft.com/en-us/library/7h3ystb6(VS.80).aspx

Ad esempio lancia questo comando, fornendo il percorso del file WSDL che ti hanno fornito.
wsdl /out:C:\CartellaOutput C:\cartella\file.wsdl

Il file C:\cartella\file.wsdl verrà letto dal tool che ti creerà le classi proxy in C:\CartellaOutput. Ovviamente sostituisci i percorsi in base alle tue esigenze.

Se tutto è stato fatto correttamente, nella cartella di output troverai un file .cs che contiene una classe speciale chiamata come il servizio che sarà il tuo punto di ingresso a tutte le operazioni definite nel servizio.

Importa il file (o i file) .cs nel tuo progetto e crea un'istanza di quella classe. Le operazioni, come per esempio il login che hai citato, appariranno come metodi che puoi invocare direttamente. Visual Studio ti aiuterà a capire quali dati fornire (e quali ti vengono restituiti) grazie al suo intellisense.

ciao,
Moreno

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Prima di tutto grazie per la pronta risposta. Ho seguito alla lettera le tue 'dritte' e sono riuscito a creare le classi proxi dal file wsdl.
Me lo conferma anche Visual Studio con l'intellisense...
Ho però ancora qualche problema: dopo aver 'postato' il form con i campi utente e password a mezzo postbackurl mi si apre una nuova pagina in cui mi viene visualizzato il contenuto di un file xml con i campi corretti dell'avvenuto login.
Come recupero le informazioni che mi occorrono? Ma, soprattutto, è giusto che abbia una risposta di questo tipo o sbaglio ancora qualcosa?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

boysoft ha scritto:

dopo aver 'postato' il form con i campi utente e password a mezzo postbackurl

Mmmh, forse il problema è qui. A quale URL stai postando?

Dovresti postare alla pagina stessa (quindi senza usare alcun postbackurl) e gestire l'evento click del bottone, in modo che tu possa eseguire del codice lato server. Lì crea un'istanza della classe proxy e invoca il suo metodo Login passando username e password.
(In realtà io non so come si chiami il metodo. Questo devi capirlo tu passando in rassegna i metodi che l'intellisense ti suggerisce, e magari capirlo da una ulteriore documentazione descrittiva del servizio, se te l'hanno fornita).

Il metodo ti restituirà qualcosa, presumibilmente un codice alfanumerico (chiamato "token") che ti permetterà di farti riconoscere quando lo reinvierai nelle successive richieste alle altre operazioni esposte dal servizio.

ciao,
Moreno

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Ciao Moreno, dopo tanti tentativi riesco ad avere qualche risposta dal web service.
La più significativa, che non mi consente di andare avanti, è la seguente:
"Impossibile stabilire la connessione. Rifiuto persistente del computer di destinazione 127.0.0.1:9090 "
Premetto che sono obbligato ad usare il web service con una VPN attiva.
Secondo te può dipendere dalla mancata autenticazione SOAP?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
"rifiuto persistente" significa che il client non è neanche riuscito a collegarsi al servizio perché all'indirizzo 127.0.0.1:9090 non c'era un server in ascolto.

In effetti, come mai usi 127.0.0.1 come indirizzo? Quello identifica localhost, cioè il tuo PC di sviluppo. Non dovresti usare l'IP di rete locale del server?
Da linea di comando, lancia un:
ping indirizzo.ip.del.server

Così verifichi che riesci a raggiungerlo e che quindi la connessione VPN è stata stabilita e configurata correttamente.

ciao,
Moreno

Enjoy learning and just keep making
167 messaggi dal 08 dicembre 2003
Buongiorno Moreno e buone fatte feste. Ho risolto il problema del 'localhost'... ero io che mi incasinavo con la VPN e la Virtual Box su cui lavoro.
E' purtroppo cambiato lo scenario di lavoro del WS, non viene più utilizzata la VPN e le chiamate al WS, ora, per poter funzionare prevedono l'autenticazione ma purtroppo non riesco a farla. Di seguito l'esempio riportato nella documentazione:

L’accesso alle funzione avviene previa autenticazione. Essa è realizzata attraverso lo standard WS-Security, Web Services Security protocol standard OASIS; tale standard permette l'autenticazione degli utenti e la confidenzialità dei messaggi scambiati con l'interfaccia del Web Service. A scopo esemplificativo si riporta un esempio del soap envelope da inviare per l’autenticazione.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> open.org/wss/2004/01/oasis-200401-wss-username-token-profile- 1.0#PasswordText">****</wsse:Password>
</soapenv:Envelope>
xmlns:ws=http://ws.gestionecdp.aci.it/"> <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis- xmlns:wsu="http://docs.oasis- <wsse:UsernameToken wsu:Id="UsernameToken-1"> <wsse:Username>m.rossi</wsse:Username> <wsse:Password Type="http://docs.oasis- </soapenv:Header> <soapenv:Body> </soapenv:Body> </wsse:Security> </wsse:UsernameToken> &#8230;&#8230;&#8230;

All&#8217;interno del soap envelope Body va riportata la chiamata al servizio che si vuol utilizzare.

Premetto che sto usando Visual Studio Express 2013 per il Web ed ho creato le classi proxy dal WSDL. Potresti cortesemente darmi una dritta?
Grazie e perdona le domande sicuramente banali ma prima d'ora non ho mai lavorato con i Web Service.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
scusa il ritardo, qui trovi un esempio per autenticarti con lo standard WS-Security. Anche in questo caso non dovrai metter mano al codice SOAP ma potrai fare tutto dalla client che ti è stato creato da wsdl.exe.
http://www.codeproject.com/Articles/7062/An-introduction-to-Web-Service-Security-using-WSE
A te interessa il paragrafo "A client application".
L'esempio è in C++ ma riuscirai facilmente a tradurlo.

Presta attenzione a questo passaggio:

Wsdl.exe derives the generated class from System.Web.Services.Protocols.SoapHttpClientProtocol by default. To be able to use the WSS methods to access the security headers, the proxy class has to inherit Microsoft.Web.Services.WebServicesClientProtocol

Quindi devi editare il file che ti è stato generato da wsdl.exe e far ereditare la classe client da Microsoft.Web.Services.WebServicesClientProtocol. Questa è una classe che ottieni installando questo pacchetto NuGet.
https://www.nuget.org/packages/Microsoft.Web.Services3/

Fammi sapere se incontri problemi.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.