2011-12-10 16 views
5

Estoy configurando un nuevo servicio .NET 4.0 WCF con un método (operación) que toma tipos de datos generados con XSD fuertemente tipados como parámetros. Esto hace las cosas limpias y ordenadas para el cliente: el cliente puede trabajar con tipos fuertes y no tener que pensar en XML.Obtener XML sin formato de params en una implementación del servicio WCF

Sin embargo, en la implementación del servicio WCF, preferiría tratar los datos de parámetros como documentos XML (LINQ XDocument) en lugar de los tipos de objetos deserializados. Es bueno que WCF se deserialice a tipos explícitos, pero para mi algoritmo genérico es más conveniente y más flexible tratar los documentos xml, principalmente porque los datos entrantes son polimórficos.

Sé que puedo tomar los objetos del parámetro y volver a serializarlos en XML, pero esto parece un desperdicio.

Entiendo que probablemente podría reemplazar los params fuertemente tipados con XElement para obtener lo que quiero para la implementación conveniencia, pero esto perderá los beneficios del tipado fuerte (comprobaciones de compilador, intellisense, auto documentación) para el cliente.

¿Hay alguna manera de decirle a WCF que en la implementación de mi servicio no necesito los objetos del parámetro deserializados, que los quiero como XML en su lugar?

O, ¿hay alguna manera de acceder al XML sin formato de los params como lo estaban antes de que WCF los deserialice en objetos? Si no puedo evitar que WCF pierda tiempo deserializando los objetos, al menos esto evitaría el costo de volver a reservarlos en XML.

+0

Todavía pensaré que realmente vale la pena la molestia, por qué no acelerar la seralización y la deserilazación. –

+0

@SurjitSamra No entiendo tu comentario. ¿Estás diciendo que WCF no vale la pena, o mi interés en acceder al XML sin formato no vale la pena? No puedo hacer nada para acelerar la serialización o la deserialización, salvo para evitar viajes innecesarios. – dthorpe

+0

lo siento, no estaba claro en mi comentario, en realidad, me refiero al acceso a XML sin formato, ¿vale la pena la molestia? WCF vale la pena :): recientemente migré más de 10 años de un sistema de distribución remota de .NET en WCF, hay una fuerte serialización/deserialización personalizada para acelerar todo, si usas algún tipo de inyecciones, por ejemplo, un marc_s dijo en su Entonces, usted encontrará cuánto tiempo lleva todo, en mi caso, me alegré de que la deserialización solo llevara <30 ms. –

Respuesta

3

Una forma de hacer esto sería crear un message inspector que inspeccione el mensaje entrante en el servidor y actúe sobre él (por ejemplo, guardándolo o algo así).

Pablo Pialorsi tiene una great blog post on how to write a message inspector, paso a paso

Inspeccionar el mensaje que dará acceso a los parámetros en el formato de mensaje SOAP prima.

Pensé que tal vez un inspector de parámetros podría ser la mejor opción, pero parece como si estos inspectores solo obtuvieran los parámetros para cualquier llamada de servicio una vez que esos parámetros ya se han deserializado en objetos, de modo que eso no suena como un enfoque viable ....

+0

Interesante.Investigará, gracias. – dthorpe

Cuestiones relacionadas