C#:Webservice modifiche tipo di parametro previsto (da un normale POCO per un generata automaticamente classe)

StackOverflow https://stackoverflow.com/questions/738994

Domanda

Ho il seguente classe in Classe in Libreria: Artist, che è un POCO

Ora ho un metodo in un web-service (che è un riferimento al citato-libreria di cui sopra) con una firma come questa:

[WebMethod]
public int Artist_AddArtist(Artist a) {
 //
}

Quando si tenta di utilizzare questo servizio da un'applicazione (che ha anche un riferimento alla precedenza libreria di classi), il parametro previsto del Artist_AddArtist il metodo non è Artist, ma un nuovo tipo di Artist che viene generato in Reference.cs che è una classe parziale che è auto-generato.

Quindi, dato che nella mia applicazione, presumibilmente lo stesso Artist classe dalla libreria e ora il metodo di Servizio Web si aspetta che questa nuova auto generato tipo, non posso passare un'istanza, il servizio web.

Come posso risolvere questo problema?

È stato utile?

Soluzione

Forse il passaggio a servizi WCF è un'opzione per voi. Per quanto mi ricordo, con un servizio WCF, è possibile riutilizzare lo stesso tipo sul ther lato server e client.

questo articolo spiega come migrare un servizio ASMX Web per un servizio WCF.

Altri suggerimenti

Non si può, e non deve, a risolvere il problema.

Alcuni altri dicono cose come modificare il file generato, ma che non è una buona pratica (come le modifiche andranno via non appena il Web di Riferimento è aggiornato).

Quello che stai vedendo è il design.Vedere Nozioni di base:Come Servizi Web Di Lavoro.

Brevemente, quando si utilizza la funzione "Aggiungi Riferimento Web", Visual Studio scarica il file WSDL del servizio, e utilizza gli Schemi XML da WSDL per creare alcune classi proxy per rappresentare l'XML descritto dallo schema.Inoltre, crea una classe proxy per il servizio stesso, avendo metodi per ogni operazione in servizio.

I dati del proxy classi di serializzazione in XML che il servizio è in attesa di ricevere, e può essere viene deserializzato XML che il server invia in risposta.

Un modo di pensare di esso è che hai solo questo problema, in quanto sia il client e il servizio sono .NET.Se il tuo client sono stati scritti in Java, quindi non pensare di essere la condivisione di classi.


WCF può fare questo, se necessario.Si introduce una dipendenza tra il client e il servizio (entrambi hanno a utilizzare versioni compatibili dell'assemblea, contenente le classi), ma quando si ha bisogno di farlo, l'opzione c'è.È utile quando c'è un problema in queste classi, che deve essere utilizzato sia dal client e dal servizio.

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