2011-05-11 9 views
5

Tenemos que integrar nuestro proyecto con la plataforma Oracle de fondo. Y esta integración se realiza a través de varios servicios web. Tengo todos los WSDL y XSD para todas estas integraciones. Y necesito generar DataContracts desde estos WSDL & XSDs.
Ahora el problema es que, en su mayoría, todas estas integraciones comparten algunos tipos de datos comunes. y quiero reutilizarlos.
por ejemplo,Generando DataContracts con el espacio de nombre exacto como en XSD

 
Integration1: oracle/common/commonDataTypes.xsd 
       oracle/integration1/someXSD.xsd 
       oracle/ebo/baseTypes.xsd 
Integration2: oracle/common/commonDataTypes.xsd 
       oracle/integration2/someXSD.xsd 
       oracle/ebo/baseTypes.xsd 
Integration3: oracle/commonDataTypes.xsd 
       oracle/integration2/someXSD.xsd 
       oracle/ebo/baseTypes.xsd 

en este caso, que desea volver a utilizar los oracle.common.CommonDataTypes entre integración1 & 2.
hasta ahora he intentado WSCF.blue & FUMEC. Pero estas herramientas generan todo el código en una sola carpeta (y solo espacio de nombres) y no siguen los espacios de nombres.
Quiero generar clases en espacios de nombres como oracle, oracle.commonData, oracle.integration1, oracle.ebo, etc. , de modo que ¿alguna forma en que DataContracts generados siga a la notación de espacio de nombres exacta como lo tienen los XSD?

Respuesta

1

No hay herramienta que haga esto por usted, me temo. O ninguno que yo sepa. La mejor manera de acheive lo que desea es:

  1. Extracto de los contratos de datos para la integración 1 usando la bandera/dconly en svcutil. Debe incluir todos los los nombres de esquema en la llamada a svcutil. Esto generará un archivo de clase con todos los tipos.

  2. Ingrese al archivo y manualmente alterne hasta que sus clases sean todas en los espacios de nombres correctos. Compile en un conjunto.

  3. A continuación, volver a la integración 1 servicio y generar su código proxy usando la opción/r en svcutil a referencia el conjunto que contiene sus tipos comunes que desea reutilización. Esto creará un archivo de clase que contiene su proxy que debería hacer referencia a sus tipos comunes.

  4. A continuación, puede hacer lo mismo para la integración 2 y 3.

Sin embargo, este enfoque se basa en el uso de svcutil DataContractSerializer para hacer el trabajo, como la bandera/r no está disponible para XmlSerializer. Y esto solo funcionará si los esquemas expuestos en los servicios de Oracle se adhieren a las reglas DCS más estrictas (se pueden encontrar aquí: http://msdn.microsoft.com/en-us/library/ms733112.aspx). Si no se cumplen estas reglas, svcutil recurrirá a XmlSerializer que no admite la reutilización de tipos.

Espero que esto ayude.

+0

/r bandera en svcutil es útil para mí. Sin embargo, para cada integración, se generan alrededor de 500 clases.Entonces no es posible para mí cambiar estas muchas clases manualmente. Además, no se recomienda modificar las clases generadas automáticamente. –

+0

Estoy de acuerdo en que no es aconsejable modificar los archivos generados si los contratos fuente cambian con frecuencia. Sin embargo, como está llamando a un servicio de Oracle, no espero que este sea el caso. Entonces es seguro hacerlo. Es un ejercicio de una sola vez, así que si bien puede llevar mucho tiempo, una vez que está hecho, ya está hecho. No sé qué otra solución sugerir. –

0

Use XSD2Code - puede especificar el espacio de nombres de destino de la clase C# generada.

+0

http://xsd2code.codeplex.com/ – Sascha

+0

problema con xsd2code es que genera todas las clases en un mismo espacio de nombres. Mi requisito es generar clases con espacio de nombres como espacio de nombres XSD. –

Cuestiones relacionadas