Problemi con file wsdl

giovedì 26 giugno 2008 - 13.05

paquito_ita Profilo | Senior Member

Ciao,

ho realizzato un web service e ne ho creato il file WSDL con disco.exe fornito da Visual Studio (http://inowx.ae24.amrein.com/Services/SiocExporter.asmx, http://inowx.ae24.amrein.com/Services/WSDL/SiocExporter.wsdl rispettivamente per il WS ed il WSDL).

Tal WS deve essere acceduto da una piattaforme partner della nostra azienda. Inparticolare il WS espone gli stessi metodi uguali per TUTTI i partner, questo è il motivo per cui le due aziende esterne hanno usato lo stesso WSDL (ovvero la seconda azienda ha copiato il WSDL della rima, cambiandone solamente l'endpoint address).

Nell'invocare un metodo del WS i partner riscontrano il seguente errore: "WSDLError: No address binding found in port."
Per acedervi si deve esprimere l'URL che risolve anche il file wsdl. Per questo io fornisco l'indirizzo:http://inowx.ae24.amrein.com/Services/WSDL/SiocExporter.wsdl (dove il file WSDL sta in una cartella indipendente). Ho visto anche un'altra notazione http://inowx.ae24.amrein.com/Services/SiocExporter.asmx?wsdl. Tuttavia provando anche con questa il risultato non cambia.

Da cosa puo' dipendere cio'? Loro usano il file .xsd (che tra l'altro disco.exe non mi genera), puo' forse essere legato a quello?
Di seguito vi posto il LORO wsdl (uguale eccetto l'endpoint):
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
E qui il mio WSDL che tuttavia non importa xsd (copiato dal loro ma usando il mio endpoint address.):
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Grazie

paquito_ita Profilo | Senior Member

Ciao,

sì ora inizia ad essere piu' chiaro. Avevo generato specificatamente il file wsdl perché nell'interfaccia dell' applicazione realizzata da un partner devo inserire l'URL che risolve il wsdl (ma come giustamente mi hai fatto notare basta usare [...].asmx?wsdl).
Ad ogni modo il WS che ho creato funziona correttamente dopo aver eseguito dei test, ma il problema è che non sembra raggiungibile/utilizzabile dall'applicazione esterna (partner). Quando indico l'indirizzo del WS come endpoint address nell'interfaccia, ottengo il seguente messaggio di errore: [b]"Server did not recognize the value of HTTP Header SOAPAction: http://www.bscw.de/WorkspaceSynchronization/GetFolderContent"[/b] dove GetFolderContent è il mio wemethod invocato dall'applicazione. Hanno anche provato a validare il mi ofile wsdl ed è stato riscontrato come errore: "WSDLError: No address binding found in port".
Su suggerimento del partner ho copiato esattamente lo stesso file wsdl da lui usato dato che i metodi esposti sono gli stessi (anche altri partner hanno fatto altrettanto con esito positivo) e di conseguenza cambiato nel mio WS il namespace sulla base di quello da lui usato.

Tuttavia anche in questo caso lo stesso errore si ripresenta. Ho provato ad accedere da una rete esterna all'indirizzo usato come endpoint (URL_WS.asmx) ed è perfettamente raggiungibile.
Non ho proprio idea di dove possa essere l'errore.Ho provto anche a chiedere a chi ha sviluppato l'applicazione, ma come risposta mi hanno detto che l'errore risiede nel mio WS dato che con altri soci funziona.

Sapreste indicarmi una seried di passi o test per verificare la causa del problema?

paquito_ita Profilo | Senior Member

>Però scusa l'indirizzo che mi hai dato nel primo post funzionava.

Infatti l'indirizzo se acceduto da browser funziona. Ho anche realizzato un'applicazione di testing che accede al web service e ne invoca i metodi. Anche in questo caso il risultato è corretto. Il problema avviene quando inserisco il mio endpoint address nella textfield relativa nell'interfaccia dell'azienda partner, in quanto poi ottengo tali errori.

Ho cambiato il valore del target namespace nel file.cs che realizza il WS (l'unico punto dove lo definisco) usando l'indirizzo della MIA azienda: [b]http://inowx.ae24.amrein.com[/b]/soap/WorkspaceSynchronization. Riprovando ad usare l'interfaccia dell'azienda partner ottengo sempre lo stesso errore : " Server did not recognize the value of HTTP Header SOAPAction:[b] http://www.bscw.de/[/b]WorkspaceSynchronization/GetFolderContent", ma ora quella parte di indirizzo [b] http://www.bscw.de/[/b] non è più presente da nessuna parte nella mia soluzione e quindi non vedo perché venga esposta come errore.

Suggerimenti?

paquito_ita Profilo | Senior Member

>Prova a rifare l'add web reference con il nuovo indirizzo magari è rimasto sporco da qualche parte.

In effetti l'errore che ottengo dall'azienda partner è proprio lo stesso che otterrei se cambiassi il namespace sul server senza fare il refresh in Visual Studio.

Tuttavia il problema risiede nel fatto che io non posso fare nulla (se nn fornire l'endpoint address del mio WS) dato che tutte le operazioni sono fatte in background dall'applicazione partner ed io non ho alcun controllo su di essa.

==================================================================================

Ho ricevuto il risultato dal un collega che lavora per l'azienda partner:

"If I use the WebServices generated from your WSDL file I got correct information from your server. But if I used the WebServices generated from WSDL file of BSCW (ovvero l'azienza partner) I got an error."
Tutti loro usano lo stesso file wsdl per fornire un'interfacia comune. Ho usato di nuovo il tool wsdl.exe per generare le classi usando direttamente il loro file wsdl e ho implementato anche i web metods che io prima non implementavo. Se tuttavia mi connetto all'indirizzo del WS e aggiungo [..].asmx?wsdl il file wsdl che visualizzo è diverso dal loro.
Di seguito il codice che mi ha mandato il collega dove mi fa notare che il loro soap-ENV è differente dal mio (il secondo) in quanto ha un livello in meno (nel mio codice in grassetto):
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5