2012-04-24 13 views
8

Visual Studio'da WCF ile bir web servisi oluşturdum ve oluşturulan WSDL'ye bakarken çok sayıda tür belirtimi içeren http://schemas.microsoft.com/2003/10/Serialization referansını içeriyor. Bu özelliklerden hiçbirini kullanmıyorum. WCF'nin bunu neden eklediğini ve bundan kurtulmanın bir yolu var mı? WCF'nin kullanılmadığı bir şema nasıl kaldırılır veya dışarıda bırakılır?

xml

benim hizmetine singleWsdl argüman kullanırken benim wsdl şöyle görünür eklendi:

<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> 

cevap

0

microsoft'un WSDL uygulama ithalatı için XSD tanımı bu ad (here bakınız).

Neden kaldırmak istiyorsun?

+0

wsdl'de hiçbir şey (ya da en azından bir şey bulamıyorum) şema tarafından belirtilen türleri kullandığı için orada bir nokta görmüyorum. Kullanılmayan bilgileri dahil etmek gereksizdir. – Markus

1

Belki artık çok geç, ama ben bu konuda koştum ve bunu çözmek başardı: Varsayılan wsdl Generatio değiştirmenin yolu uygulayan IWsdlExportExtension gereğidir. Bunu kaldırmak istedim nedeni, hem Java hem de RPG'de istemciler oluşturuyordu ve wsdl2java ve wsdl2rpg araçları, bu şemaya dayalı büyük, çirkin veri yapıları oluşturuyordu.

Benim durumumda, DataContract serializer kullanıyordum ve serileştirdiğim bazı nesneler, [DataContract] özniteliğine sahip olmayan türlerin üyeleri vardı. Bu ekstra şemanın gitmesi için, serileştirilmiş olan her şey, bu özniteliğe sahip olması için tür ağacının sonuna kadar. Hizmet sözleşmelerinde devralınan bir kamu üyesi olduğunda da bu sorun vardı.

+0

Her zaman daha iyi şeyler almakla ilgileniyorum. :) Sınıflarım ve arabirimlerimi kontrol ettim ve tüm sınıfların [DataContract] ve tüm sınıf üyelerinin [DataMember] öğelerine sahip olduğunu görebildiğim kadarıyla kontrol ettim. Çok basit bir sözleşmedir, bu yüzden miras yoktur. – Markus

+1

Int gibi "garip" türler kullanıyorum olabilir mi? ve sözleşmelerde IEnumerable ? – Markus

+0

Muhtemelen, jenerik türlerimiz yoktu, bu sizin sorununuz olabilir. –

İlgili konular