Override metoda ToString în serviciul WCF

Aceasta este clasa serviciului generat de mine:

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

Îmi folosesc propriul serviciu. În MyClass am suprascris ToString() dar nu o am la clientul meu. Vreau să-l generez sau ca MyClass să fie parțial capabil să înlocuiesc singur ToString ?

Știu că pot scrie în fișierul .cs generat. Care este cel mai bun mod de a face acest lucru și deloc ar trebui să o fac?

6
WCF va genera o clasă proxy de client care are aceeași semnătură xml atunci când este serializată/deserializată - dar nu NU "propagă" orice metodă "proprietăți publice" de la server la client.
adăugat autor marc_s, sursa
ce văd dar cum să-mi ating obiectivul?
adăugat autor levi, sursa

2 răspunsuri

Dacă definiți atât clientul, cât și serviciul, nu este necesar să utilizați clasele de generare WSDL. Deplasați obiectele partajate într-un ansamblu separat și trimiteți-l din ambele proiecte client și server. Când creați referința serviciului, există o opțiune "avansată" (pe care cred că este implicită) care reutilizează toate clasele cunoscute din WSDL în loc să genereze altele noi.

Chiar mai bine, dacă mutați contractul de servicii în biblioteca dvs. partajată, nici măcar nu trebuie să creați referința de service, puteți apela direct ChannelFactory direct și eliminați întreaga clasă proxy generată automat.

I have a demonstration on how to do both of these things on my blog: http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

Dacă aveți absolut nevoie să utilizați serviciul WSDL din serviciu (de exemplu, nu aveți control asupra părții de serviciu și s-ar putea schimba asupra dvs.), atunci puteți extinde clasele parțiale pe care le creează VS ați sugerat). Cele mai multe clase de auto-generare pe care le obțineți de la VS în aceste zile sunt clase parțiale pentru a face posibil acest fel de extindere. Desigur, dezavantajul este că nimic nu garantează faptul că clientul și metodele suplimentare de clasă partajate ale serverului sunt aceleași. Aș considera cu siguranță că aceasta este o opțiune de ultimă instanță.

6
adăugat
poate u explica-mi în scurt timp de ce acest serviciu generează clasa parțială? pentru ce motiv?
adăugat autor levi, sursa
Aproape tot ceea ce VS2010 generează automat este o clasă parțială, astfel încât să îi extindeți după cum este necesar.
adăugat autor Michael Edenfield, sursa

Dacă partajați DLL-ul cu metoda exixts între proiectul client și server, puteți utiliza metoda. În mod implicit, WCF generează fiecare clasă numai cu proprietăți declarate în interfața de serviciu. Nici o metodă nu este generată.

Puteți crea doar un fișier separat dll și puneți ceea ce doriți să împărțiți între serviciu și client în acest DLL; și adăugați acest DLL ca o referință la ambele proiecte de client și de servicii. În mod implicit, atunci când generați proxy-ul, acesta nu va genera automat clase partajate.

3
adăugat