2014-06-26 70 views
0

这一个数据成员是我的数据的数据的合同中的一个的VB类的一个示例:供应不同的命名空间用于在WCF DataContract

<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

找到解决方案!

使用这样的服务合同:

<ServiceContract(Namespace:="http://www.example.com/NS1")> 
Public Interface MyServiceContract 
    ... 
End Interface 

XML的类SOMETYPE看起来是这样的:

<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封装在同一个名称空间。

相关问题