2012-06-01 9 views
6

Questo è il mio servizio generato classe:Override metodo ToString in servizio WCF

public partial class MyClass : object, 
           System.Runtime.Serialization.IExtensibleDataObject, 
           System.ComponentModel.INotifyPropertyChanged 
{ } 

Sto usando il mio proprio servizio. In MyClass ho sovrascritto ToString() ma non ce l'ho nel mio client. Voglio o generarlo o come MyClass è parziale sono in grado di ignorare ToString me stesso?

So che posso scrivere nel file .cs generato. Qual è il modo migliore per farlo e dovrei farlo?

+2

WCF genererà una classe proxy lato client che ha la stessa ** firma XML ** se serializzata/deserializzata, ma che NON ** "propagherà" alcun metodo (solo rigorosamente dati - proprietà pubbliche della classe)) dal server al client. –

+2

che vedo ma come raggiungere il mio obiettivo? – levi

risposta

6

Se si definiscono sia il client che il servizio, non è necessario utilizzare le classi di generazione WSDL. Spostare gli oggetti condivisi in un assembly separato e fare riferimento a entrambi i progetti client e server. Quando crei il riferimento al servizio, c'è un'opzione "avanzata" (che credo sia attiva per impostazione predefinita) che riutilizza qualsiasi classe nota dal WSDL invece di generarne di nuove.

Ancora meglio, se si sposta il contratto di servizio nella libreria condivisa, non è nemmeno necessario creare il riferimento del servizio, è sufficiente chiamare lo ChannelFactory direttamente ed eliminare l'intera classe proxy generata automaticamente.

Ho una dimostrazione su come fare entrambe le cose sul mio blog: http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

Se è assolutamente necessario di utilizzare il WSDL del servizio (ad esempio, non si ha il controllo sul lato del servizio e potrebbe cambiare su di te), quindi puoi estendere le classi parziali che VS crea (come hai suggerito). La maggior parte delle classi generate automaticamente da VS in questi giorni sono classi parziali appositamente per rendere possibile questo tipo di estensione. Lo svantaggio, ovviamente, è che nulla garantisce che i metodi aggiuntivi di classe parziale del client e del server siano gli stessi. Lo considererei sicuramente l'ultima opzione.

+0

puoi spiegarmi brevemente perché questo servizio genera classi parziali? per quale ragione? – levi

+0

Quasi tutto ciò che VS2010 genera automaticamente sono classi parziali, quindi è possibile estenderle se necessario. –

3

Se si condivide la DLL in cui si verifica il metodo sovrascritto tra progetto client e server, è possibile utilizzare il metodo. Per impostazione predefinita, WCF genera ogni classe con solo le proprietà dichiarate nell'interfaccia del servizio. Nessun metodo è generato.

È possibile creare un file dll separato e inserire ciò che si desidera condividere tra servizio e client in questa dll; e aggiungi questa dll come riferimento sia ai progetti client che ai progetti di servizio. Per impostazione predefinita, quando si genera il proxy, non genererà automaticamente le classi condivise.