如何删除或排除WCF添加的未使用的架构?

时间:2012-04-24 13:46:32

标签: wcf wsdl

我在Visual Studio中使用WCF创建了一个Web服务,在查看生成的WSDL时,它包含对http://schemas.microsoft.com/2003/10/Serialization的引用,其中包含许多类型规范。我不使用任何这些规格。有谁知道为什么WCF添加这个以及是否有任何方法可以摆脱它?

在我的服务上使用singleWsdl参数时,添加到我的wsdl的xml看起来像这样:

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

3 个答案:

答案 0 :(得分:2)

现在可能为时已晚,但我遇到了这个问题,并且能够解决它。我想删除它的原因是因为我在Java和RPG中生成客户端,wsdl2javawsdl2rpg工具基于该模式生成大而丑陋的数据结构。

在我的情况下,这是因为我正在使用DataContract序列化程序,而我正在序列化的一些对象具有不具有[DataContract]属性的类型的成员。为了使这个额外的模式消失,所有被序列化的东西,一直到需要具有该属性的类型树。

只要服务合同上有一个继承的公共成员,它也会遇到这个问题。

答案 1 :(得分:0)

microsoft的WSDL实现的XSD定义导入了这个命名空间(参见here)。

为什么要删除它?

答案 2 :(得分:0)

我同意不需要删除它。它也被多次使用,你不知道它。更改默认wsdl generatio的方法是实现IWsdlExportExtension:

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