Quando parlo di classe proxy immagino il mondo dei web services ed in particolare il lato client. E' una assunzione assolutamente imprecisa, ma lasciatemi questa piccola deformazione professionale :-)

Detto questo, molto spesso chi consuma web services utilizza nel proprio codice direttamente il servizio e le entità ad esso associate. Vediamo un esempio, il mio web method ritorna un'entità Ordine. Ho tre possibilità:

  1. Uso l'Ordine del mio codice (lato client)
  2. Crea una mia classe ordine mappata sull'Ordine ritornato dal web service
  3. Creo una mia classe ordine partial di Ordine

La prima soluzione è la peggiore perchè solitamente il codice generato dal wsdl.exe (o add web reference) è molto povero. Manca infatti di proprietà (in .NET 2.0 wsdl genera le proprietà), i costruttori con parametri e metodi di utility (es. validazione). Aggiungere tutto questo nel codice generato ci sottopone al rischio della cancellazione se aggiorniamo il web service.

La seconda soluzione è migliore, e l'unica disponibile in .NET 1.x. In pratica potete aggiornare il web service quante volte volete che il vostro codice client (utilizzatore della classe proxy) non ne risentirà. Basterà ovviamente aggiornare il codice di mapping.

La terza soluzione è l'ideale ed applicabile solo in .Net 2.0. Infatti porta con se sia i vantaggi della prima sia della seconda, al costo di fare a meno dell'add web reference ma utilizzando wsdl.exe (per avere le proprietà)