3

我从 WCF 服务导出了 WSDL,并应用了单个 WSDL 参数。

有很多 qXX XML 命名空间,如以下片段中的类型和方法。

<xs:complexType name="PrincipalReference">
  <xs:complexContent mixed="false">
    <xs:extension base="q2:EntityReferenceBase">
      <xs:sequence/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>


<xs:element name="GetPermissions">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="0" name="principal" nillable="true" type="q1:PrincipalReference"/>
      </xs:sequence>
  </xs:complexType>
</xs:element>

PrincipalReference 类继承自 EntityReferenceBase。PrincipalReference 和 EntityReferenceBase 都在同一个 C# 命名空间中,并且 DataContractAttribute 的 Namespace 字段的值相同。所以它们无论如何都在一个命名空间中。

我能以某种方式摆脱这些 q1 和 q2 XML 命名空间吗?Web 服务旨在从各种环境(平台/语言)中使用,因此 WSDL 更清晰,我更快乐。

例如,我可以作为一种解决方法,停止使用继承,将基类内容复制到派生的内容,从而解决 q2 问题,但我不知道如何处理应用于方法参数类型的 q1 命名空间。

4

2 回答 2

2

我认为您需要执行以下操作:-

在注释服务合同和数据合同时使用命名空间属性。例如这样的事情: -

[ServiceContract(Namespace = "http://some.url/2012/11")]

[DataContract(Namespace = "http://some.url/2012/11")]

此外,在设置端点时,请确保设置bindingNameSpace属性:-

<endpoint address=""
          binding="wsHttpBinding"
          bindingConfiguration="someBindingConfiguration" 
          bindingNamespace="http://some.url/2012/11"
          contract="Some.Contract" />
于 2012-11-27T17:13:05.923 回答
1

我有同样的问题,奇怪的是它首先没有这些 q1, q2, q3 前缀。我正在使用 DataContract 序列化程序,但我错过了使用 DataContract 和 DataMember 属性覆盖我需要的所有内容。之后这些前缀就消失了。

还要注意你序列化的内容,我有一个必须替换为 int 的 TimeSpan 值,这样就不会再发生这种情况了。

于 2016-06-10T13:39:32.233 回答