2012-06-01 16 views
6

Ésta es mi clase de servicio genera. En MyClass he anulado ToString() pero no lo tengo en mi cliente. Quiero generarlo o como MyClass es parcial ¿puedo sobrescribir ToString?de anulación en el servicio WCF

Sé que puedo escribir en el archivo .cs generado. ¿Cuál es la mejor manera de hacerlo y en todo caso debería hacerlo?

+2

WCF generará una clase de proxy del lado del cliente que tenga la misma ** firma XML ** serializada/deserializada, pero eso ** ** propaga "cualquier método (estrictamente solo datos) las propiedades públicas de su clase) del servidor al cliente. –

+2

¿Qué veo pero cómo lograr mi objetivo? – levi

Respuesta

6

Si está definiendo tanto el cliente como el servicio, no necesita utilizar las clases WSDL-generate. Mueva los objetos compartidos a un ensamblaje separado y haga referencia a ellos desde proyectos de cliente y servidor. Cuando crea la referencia de servicio, hay una opción "avanzada" (que creo que está activada por defecto) que reutiliza las clases conocidas del WSDL en lugar de generar nuevas.

Mejor aún, si mueve el contrato de servicio a su biblioteca compartida, ni siquiera necesita crear la referencia de servicio, puede simplemente llamar al ChannelFactory directamente y eliminar toda la clase de proxy autogenerada.

Tengo una demostración de cómo hacer ambas cosas en mi blog: http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

Si es absolutamente necesario utilizar el WSDL del servicio (por ejemplo, usted no tiene control sobre el lado del servicio y podría cambiarle), entonces puede extender las clases parciales creadas por VS (como sugirió). La mayoría de las clases de autogeneración que obtienes de VS estos días son clases parciales específicamente para hacer posible este tipo de extensión. La desventaja, por supuesto, es que nada garantiza que los métodos de clases parciales adicionales del cliente y del servidor sean los mismos. Definitivamente consideraría esto una opción de último recurso.

+0

¿me puede explicar en breve por qué ese servicio genera una clase parcial? ¿por qué razón? – levi

+0

Casi todo lo que VS2010 genera automáticamente son clases parciales, por lo que puede ampliarlas según sea necesario. –

3

Si comparte el dll donde el método reemplazado exixts entre proyecto de cliente y servidor, puede utilizar el método. De forma predeterminada, WCF genera cada clase con solo las propiedades declaradas en la interfaz de servicio. No se genera ningún método

Puede simplemente crear un archivo dll independiente y colocar lo que desea compartir entre el servicio y el cliente en este dll; y agregue este dll como referencia a ambos proyectos de cliente y servicio. De forma predeterminada, cuando genera el proxy, no generará automáticamente las clases compartidas.