2009-09-26 12 views
6

Es bien sabido cómo crear un servicio WCF "primer contrato" donde el primer paso es definir el ServiceContract sy DataContract s.Esquema Primero WCF Development

¿Cómo debería uno acercarse al desarrollo de WCF si uno tiene el "esquema primero". En otras palabras, un esquema XSD se ha desarrollado independientemente. El servicio no puede desviarse del esquema que ya está definido. Como complicación, el esquema podría usar características que no se traducen en DataContract (las capacidades de DataContract, después de todo, son bastante mínimas).

El uso de XDocument en el lado del servidor o del cliente para todo el documento estaría bien. (El uso de XDocument sería preferible a cualquier cosa que implique el XmlSerializer que desafortunadamente parece haber caído en desgracia sin reemplazo). Es un requisito que los metadatos/WSDL informen correctamente el esquema real según los estándares. No puede informar un esquema "genérico" como xsd: any. (Encontrar la manera de tratar con estos requisitos WSDL es la parte que me está dando más problemas.)

(preguntas similares/respuestas aquí no abordan XDocument o WSDL requisitos.)

+1

si su esquema no es compatible con el serializador DataContract, tendrá problemas, diría yo. ¿Qué características está utilizando en su esquema que no son compatibles con el serializador de contrato de datos? –

+0

Muchas. Los atributos XML son uno. Por ejemplo . –

Respuesta

4

Si ya tiene el XSD, el único eslabón perdido entre esos y una interfaz WCF es el WSDL. Una vez que tenga un WSDL, puede usar svcutil.exe para generar interfaces WCF y clases debidamente anotadas con los atributos requeridos.

Puede hacerlo de la manera difícil y escribir el WSDL a mano, pero también puede considerar la herramienta WSCF.

+0

Gracias, pero esto usa System.Xml.Serialization que preferiría no usar. XmlSerializer parece ser una parte importante de la interoperabilidad de WCF, pero MS no parece interesada en mejorarla. :(Lo que estoy buscando aquí es una forma de usar XDocument y también obtener los metadatos WSDL que espero sean devueltos por el servicio. –

+4

En realidad, WCF usará el ** DataContractSerializer ** de forma predeterminada, que es una bestia bastante diferente de el XmlSerializer. Está optimizado y es más rápido en general, utiliza un modelo específico de "aceptación" (en lugar de exclusión voluntaria), pero tiene otras limitaciones (por ejemplo, no admite atributos en el XML serializado) –