Sono necessari gli attributi DataContract per WCF

Sto scrivendo il servizio WCF e il suo cliente. Voglio inviare / ricevere oggetti delle mie classi personalizzate, tra servizio e client.

Ho 3 moduli

  • Servizio WCF
  • Client WCF
  • libreria di classi comuni

Sia il servizio WCF che il client hanno riferimenti alla libreria di classi comuni. Non voglio contrassegnare tutta la mia class con gli attributi DataContract.

Quindi, la mia domanda “Sono necessari gli attributi DataContract per WCF?”

Io uso .NET 4 e netTcpBinding.

Se ricordo correttamente (IIRC), se non si usano marcatori di dati formali di dati, per impostazione predefinita si comporta come un serializzatore di campi. Funzionerà, ma è meno facile da eseguire la versione, poiché le modifiche private possono interrompere il client / server. IMO dovresti sempre decorare formalmente i tipi di WCF con gli attributi data-contract / data-member. Funzionerà senza di loro, ma per i motivi sbagliati (IIRC, in origine non funzionava senza marcatori formali).

“Sono necessari gli attributi DataContract per WCF”

Tecnicamente, no. Questo dipende dal fatto che si usi DataContractSerializer o meno (che è l’impostazione predefinita su molti collegamenti).

Ci sono altre opzioni:

  1. Considera serializzatori alternativi
  2. Prova a utilizzare Data Surrogates del contratto (gli attributi sono ancora richiesti da qualche parte , ma potenzialmente significa che puoi lasciare la tua class intatta, se questo è pertinente)
  3. Affidatevi alle impostazioni di serializzazione predefinite per quando serializzate le classi senza attributi Data Contract

È ansible utilizzare diverse tecniche di serializzazione con WCF, è una delle cose belle adattabili al riguardo. Dare un’occhiata:

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

Non è necessario utilizzare gli attributi DataContract, il servizio funzionerà perfettamente senza di essi.

Detto questo, non credo davvero che avere il tuo servizio e il client condividano una libreria di classi sia il miglior approccio di progettazione. Sarebbe molto più chiaro se esponessi i tuoi tipi tramite DataContracts.

Cosa succederebbe quando un giorno qualcuno vorrà consumare il proprio servizio ma non avrà accesso alla libreria di classi condivise?