.net WCF WSDL摆脱qXX名称空间
我已从WCF服务导出WSDL,并应用了singleWSDL参数 在下面的类型和方法片段中使用了很多qXX XML名称空间.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
<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产生影响。