这是我的一个数据数据合同的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>
提前致谢,
费尔南多·马丁斯。答案 0 :(得分:0)
找到解决方案!
使用这样的服务合同:
<ServiceContract(Namespace:="http://www.example.com/NS1")>
Public Interface MyServiceContract
...
End Interface
类SomeType的XML如下所示:
<SomeType xmlns="htttp://www.example.com/NS1">
...
<SomeMember>some text</SomeMember>
...
</Sometype>
将XmlSerializerFormat()添加到服务合同中:
<ServiceContract(Namespace:="http://www.example.com/NS1")>
<XmlSerializerFormat()>
Public Interface MyServiceContract
...
End Interface
XML变为这样(为每个成员显示名称空间):
<SomeType>
...
<SomeMember xmlns="htttp://www.example.com/NS1">some text</SomeMember>
...
</Sometype>
然后,第三方客户端为SomeType分配封装SomeType的相同名称空间。