visual studio data c# .net wcf serialization

c# - studio - ¿Se requieren atributos de DataContract para WCF?



operationcontract (4)

Estoy escribiendo el servicio WCF y su cliente. Deseo enviar / recibir objetos de mis clases personalizadas, entre el servicio y el cliente.

Tengo 3 módulos

  • Servicio WCF
  • WCF cliente
  • biblioteca de clase común

Tanto el servicio WCF como el cliente tienen referencias a la biblioteca de clases común. No quiero marcar toda mi clase con los atributos de DataContract.

Entonces, mi pregunta "¿Se requieren atributos de DataContract para WCF?"

Yo uso .NET 4 y netTcpBinding.


"Se requieren atributos de DataContract para WCF"

Técnicamente, no. Esto depende de si usa el DataContractSerializer o no (que es el predeterminado en muchas vinculaciones).

Hay otras opciones:

  1. Considere los serializadores alternativos
  2. Intente utilizar Data Contract Surrogates (todavía se requieren atributos en algún lugar , pero potencialmente significa que puede dejar su clase intacta, si es relevante)
  3. Confíe en los valores predeterminados de serialización para serializar clases sin los atributos de Contrato de datos

No es necesario usar los atributos de DataContract, su servicio funcionará perfectamente sin ellos.

Habiendo dicho eso, realmente no creo que tener su servicio y el cliente compartan una biblioteca de clase es el mejor enfoque de diseño. Sería mucho más claro si expones tus tipos a través de DataContracts.

¿Qué pasaría si algún día alguien quiere consumir su servicio pero no tiene acceso a la biblioteca de clases compartida?



Si recuerdo correctamente (IIRC), si no usa marcadores formales de contrato de datos, de manera predeterminada actúa como un serializador de campo. Esto funcionará, pero es menos fácil de versionar, ya que los cambios privados pueden romper el cliente / servidor. OMI siempre debe decorar formalmente los tipos de WCF con los atributos de contrato de datos / miembro de datos. Funcionará sin ellos, pero por las razones equivocadas (IIRC, originalmente no funcionó sin marcadores formales).