2012-04-24 11 views
8

He creado un servicio web en Visual Studio con WCF y cuando miro el WSDL generado, incluye una referencia al http://schemas.microsoft.com/2003/10/Serialization que contiene muchas especificaciones de tipo. No uso ninguna de estas especificaciones. ¿Alguien sabe por qué WCF lo agrega y si hay alguna manera de deshacerse de él?¿Cómo eliminar o excluir un esquema que WCF agrega que no se usa?

el XML añadido a mis WSDL tiene este aspecto cuando se utiliza el argumento singleWsdl en mi servicio:

<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="anyType" nillable="true" type="xs:anyType" /> 
    <xs:element name="anyURI" nillable="true" type="xs:anyURI" /> 
    <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" /> 
    <xs:element name="boolean" nillable="true" type="xs:boolean" /> 
    <xs:element name="byte" nillable="true" type="xs:byte" /> 
    <xs:element name="dateTime" nillable="true" type="xs:dateTime" /> 
    <xs:element name="decimal" nillable="true" type="xs:decimal" /> 
    <xs:element name="double" nillable="true" type="xs:double" /> 
    <xs:element name="float" nillable="true" type="xs:float" /> 
    <xs:element name="int" nillable="true" type="xs:int" /> 
    <xs:element name="long" nillable="true" type="xs:long" /> 
    <xs:element name="QName" nillable="true" type="xs:QName" /> 
    <xs:element name="short" nillable="true" type="xs:short" /> 
    <xs:element name="string" nillable="true" type="xs:string" /> 
    <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" /> 
    <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" /> 
    <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" /> 
    <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" /> 
    <xs:element name="char" nillable="true" type="tns:char" /> 
    <xs:simpleType name="char"> 
    <xs:restriction base="xs:int" /> 
    </xs:simpleType> 
    <xs:element name="duration" nillable="true" type="tns:duration" /> 
    <xs:simpleType name="duration"> 
    <xs:restriction base="xs:duration"> 
     <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" /> 
     <xs:minInclusive value="-P10675199DT2H48M5.4775808S" /> 
     <xs:maxInclusive value="P10675199DT2H48M5.4775807S" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="guid" nillable="true" type="tns:guid" /> 
    <xs:simpleType name="guid"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:attribute name="FactoryType" type="xs:QName" /> 
    <xs:attribute name="Id" type="xs:ID" /> 
    <xs:attribute name="Ref" type="xs:IDREF" /> 
</xs:schema> 

Respuesta

0

Acepto que no hay necesidad de eliminarlo. También muchas veces se usa y no se sabe. La forma de cambiar generatio WSDL predeterminado es por IWsdlExportExtension de aplicación:

http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iwsdlexportextension.aspx

+0

En parte, estoy de acuerdo en que tal vez no sea necesario eliminarlo, pero ¿por qué incluirlo? Supuse que IWsdlExportExtension era la forma de eliminarlo si ningún otro esquema lo usaba, pero esperaba una solución más agradable. :) – Markus

0

La definición XSD para la importación de implementación de Microsoft WSDL este espacio de nombres (ver here).

¿Por qué quieres eliminarlo?

+0

Dado que nada (o al menos no puedo encontrar nada) en el wsdl utiliza los tipos especificados por el esquema, no veo ningún motivo para tenerlo allí. Simplemente parece innecesario incluir información que no se usa. – Markus

1

Tal vez sea demasiado tarde ahora, pero me encontré con este tema y fue capaz de resolverlo. La razón por la que quería eliminarlo era porque estaba generando clientes tanto en Java como en RPG, y las herramientas wsdl2java y wsdl2rpg generan estructuras de datos grandes y feas basadas en ese esquema.

En mi caso, fue porque estaba usando el serializador DataContract, y algunos de los objetos que estaba serializando tenían miembros de tipos que no tenían el atributo [DataContract]. Para hacer que ese esquema adicional desaparezca, todo lo que se serializa, todo el camino hacia abajo del árbol de tipos necesario para tener ese atributo.

También tenía este problema cada vez que había un miembro público heredado en los contratos de servicio.

+0

Siempre interesado en mejorar mis cosas. :) Ha revisado mis clases e interfaces y, por lo que puedo ver, todas las clases tienen el [DataContract] y todos los miembros de la clase tienen el [DataMember]. Es un contrato muy simple, por lo que no hay herencia. – Markus

+1

¿Podría ser que estoy usando tipos "impares" como int? e IEnumerable en los contratos? – Markus

+0

Posiblemente, no teníamos ningún tipo genérico, por lo que ese podría ser su problema. –

Cuestiones relacionadas