【发布时间】:2014-06-26 00:03:57
【问题描述】:
这是我的数据数据合同之一的 VB 类示例:
<System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038"), _
System.SerializableAttribute(), _
System.Diagnostics.DebuggerStepThroughAttribute(), _
System.ComponentModel.DesignerCategoryAttribute("code"), _
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://www.example.com/NS1"), _
System.Runtime.Serialization.DataContractAttribute([Namespace]:="http://www.example.com/NS1")> _
Partial Public Class SomeType
...
Private someMemberField As String
...
<DataMember(Order:=4)> _
Public Property SomeMember() As String
Get
Return Me.someMemberField
End Get
Set(value As String)
Me.someMemberField = value
End Set
End Property
End Class
WSDL 变为(命名空间为 http://www.example.com/NS1 符合预期):
<xs:complexType name="SomeType">
<xs:sequence>
...
<xs:element minOccurs="0" name="SomeMember" nillable="true" type="xs:string"/>
...
</xs:sequence>
</xs:complexType>
一个 XML 示例是:
<SomeType xmlns="htttp://www.example.com/NS1">
...
<SomeMember>some text</SomeMember>
...
</Sometype>
这对我来说是完美的。但是,我的客户端(不是 WCF)需要为 DataMember 使用不同的命名空间。像这样的 XML 示例:
<SomeType xmlns="http://www.example.com/NS1">
...
<SomeMember xmlns="http://www.example.com/NS2">some text</SomeMember>
...
</Sometype>
我认为 WSDL 应该类似于:
<xs:complexType name="SomeType">
<xs:sequence>
...
<xs:element minOccurs="0" name="SomeMember" nillable="true" type="xs:string" xmlns:q1="http://www.example.com/NS2"/>
...
</xs:sequence>
</xs:complexType>
我知道如何处理复杂的数据类型。
我所要做的就是更改相应类的 DataContractAttribute 中的命名空间,这是我为非原始数据类型的成员所做的。
这对于 String 等原始数据类型是否可行?
我无法更改 DataMembers 中的命名空间,也想不出任何其他方式为原始数据类型设置不同的命名空间。
但是,从 XSD 生成的 XML 示例确实在原始数据类型成员中包含命名空间。
有谁知道我怎样才能使用 WCF 获得这样的东西?
<SomeType xmlns="http://www.example.com/NS1">
...
<SomeMember xmlns="http://www.example.com/NS2">some text</SomeMember>
...
</Sometype>
提前致谢,
费尔南多·马丁斯。
【问题讨论】:
标签: xml wcf namespaces wsdl