Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WCF WSDL摆脱qXX名称空间_.net_Wcf_Wsdl_.net 4.5 - Fatal编程技术网

.net WCF WSDL摆脱qXX名称空间

.net WCF WSDL摆脱qXX名称空间,.net,wcf,wsdl,.net-4.5,.net,Wcf,Wsdl,.net 4.5,我已从WCF服务导出WSDL,并应用了singleWSDL参数 在下面的类型和方法片段中使用了很多qXX XML名称空间 <xs:complexType name="PrincipalReference"> <xs:complexContent mixed="false"> <xs:extension base="q2:EntityReferenceBase"> <xs:sequence/> </xs:exte

我已从WCF服务导出WSDL,并应用了singleWSDL参数

在下面的类型和方法片段中使用了很多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的命名空间字段中有一个相同的值。因此,它们无论如何都在一个名称空间中

我能否以某种方式摆脱这些q1和q2 XML名称空间?Web服务旨在从各种环境(平台/语言)中使用,所以WSDL越清晰,我就越高兴


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

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

在注释服务契约和数据契约时使用namespace属性。比如说:-

[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" />

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


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

我已经这样做了。在每个属性上设置名称空间字段。所有名称空间值都相同。抱歉@adontz我没有正确阅读您的帖子,所以回答了错误的问题。在xs:extension上,我看不到一种摆脱q2:EntityReferenceBase的明显方法。如前所述,您可以重构PrincipalReference,使其不从基类继承。您可以尝试的另一件事(我不知道这是否可行)是将EntityReferenceBase设置为抽象类-这可能会对生成的xsd产生影响。