Domanda

Ho ereditato un file WSDL per un servizio Web su un sistema a cui non ho accesso per lo sviluppo e il test.

Devo generare un servizio web che aderisca a quel WSDL. Il wrapper è .NET, ma se esiste un modo semplice per farlo con un'altra piattaforma, potremmo essere in grado di vederlo. Il servizio Web di produzione è basato su Java.

Qual è il modo migliore per farlo?

Nota: wsdl ereditato non sembra essere compatibile con wsdl.exe perché non è conforme al profilo di base WS-I v1.1. In particolare, il gruppo che lo ha trasmesso ha menzionato che utilizza un altro standard che lo strumento Microsoft non supporta, ma non ha chiarito. L'errore è correlato a un campo "nome" obbligatorio:

Error: Element Reference '{namespace}/:viewDocumentResponse' declared in
schema type '' from namespace ''
       - the required attribute 'name' is missing

Per chiarezza, capisco che posso facilmente creare una classe wrapper .NET dal file WSDL, ma non è quello di cui ho bisogno. È così:

Aggiornamento: il servizio Web originale è stato creato utilizzando Axis.

Diagramma del sistema che mostra un servizio Web non disponibile e un servizio Web fittizio http: // paulw.us/blog/uploads/SO-WSDL-Question2.gif

È stato utile?

Soluzione

Stiamo utilizzando lo strumento WSCF - Primo contratto di servizi Web da Pensa a fare lo sviluppo di servizi web creando prima lo schema XSD e quindi generando interfacce di servizio usando questo strumento. Potrebbe essere utile generare interfacce di servizio da WSDL ma non ho ancora provato questo.

Altri suggerimenti

Potresti trovare utile utility da riga di comando wsdl.exe di .NET utilizzando l'opzione / serverInterface . Secondo la documentazione:

  

Genera interfacce per lato server   implementazione di un Web ASP.NET   Servizio. Viene generata un'interfaccia per   ogni associazione nei documenti WSDL.   Il solo WSDL implementa il WSDL   contratto (classi che implementano il   l'interfaccia non dovrebbe includere nessuno dei due   quanto segue sui metodi di classe:   Attributi del servizio Web o   Attributi di serializzazione che cambiano   il contratto WSDL). La forma abbreviata è   '/ Si'.

Sì: è possibile utilizzare WSCF (come sopra) per generare il codice lato server. L'URL effettivo può quindi essere sovrascritto per puntare all'URL di test che si desidera utilizzare.

Tuttavia, questo genera solo uno stub. Devi ancora codificare l'attuale ad es. Metodo GetCustomers () che è in qualche modo sospetto perché non hai idea di come funzioni l'implementazione effettiva.

Quindi puoi deridere questo o creare un semplice server Web ASP per eseguirlo.

Prova a deridere l'interfaccia del wrapper usando RhinoMocks e StructureMap .

Non sono sicuro se questo aiuterà,

quello che ho fatto di recente è:

  • Genera file .cs utilizzando lo strumento wsdl o Visual Studio
  • L'ho cambiato in una classe parziale
  • Ho creato un'altra classe parziale, in cui tutto ciò che fa è aggiungere una riga per dire che la classe implementa IWhatEver
  • Ho creato un'interfaccia uguale alla classe del proxy generata (pertanto il proxy implementa completamente l'interfaccia)

Quindi ho usato un Mocking framework (Moq) nel mio caso, per deridere il WebService, quindi ho usato l'iniezione di dipendenza da un uomo povero (passa il mock in un costruttore della classe sotto test) .. che può gestire un'istanza di IWhatever

Prova via ..

Spero che aiuti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top