2010-10-29 4 views
0

je les MessageContracts suivantes à utiliser comme une requête:WCF MessageContract Liste sérialisation

<MessageContract(WrapperName:="get")> _ 
Public Class GetRequest 
    Inherits BaseAuthenticatedRequest 

    Protected _typeName As cEnum.eType 
    Protected _id As Integer 

    <MessageBodyMember()> _ 
    Public Property TypeName() As cEnum.eType 
    ... 

    <MessageBodyMember()> _ 
    Public Property Id() As Integer 
    ... 
End Class 

<MessageContract(WrapperName:="getLimited")> _ 
Public Class GetLimitedRequest 
    Inherits GetRequest 

    Protected _propertyList As List(Of String) 

    <MessageBodyMember(Namespace:=Api2Information.Namespace)> _ 
    Public Property PropertyList() As List(Of String) 
    ... 
End Class 

Mais lors du test en SoapUI, le corps de la demande getLimited est créé:

<v2:getLimited> 
    <!--Optional:--> 
    <v2:Id>?</v2:Id> 
    <!--Optional:--> 
    <v2:PropertyList> 
     <!--Zero or more repetitions:--> 
     <arr:string>?</arr:string> 
    </v2:PropertyList> 
    <!--Optional:--> 
    <v2:TypeName>?</v2:TypeName> 
    </v2:getLimited> 

v2 = Api2Information.Namespace. Ce que je veux vraiment, c'est que les chaînes contenues dans PropertyList soient nommées v2, pas arr. Y a-t-il de toute façon pour moi d'y parvenir? Je convertis un service ASMX pour utiliser WCF et nous avons quelques applications où nous ne pouvons pas nous permettre de devoir recompiler et redistribuer.

Merci pour votre aide!

+0

'Api2Information.Namespace' est utilisé sur mon méthodes de service également, pour obtenir tout sous l'espace de noms. L'ajout d'un espace de noms à 'PropertyList' n'a rien changé, c'était juste ma tentative d'obtenir des chaînes de caractères correctement. –

Répondre

0

J'ai trouvé ce que je cherchais. L'utilisation d'un type de collection personnalisée comme:

<CollectionDataContract(Namespace:=Api2Information.Namespace)> _ 
Public Class PropertyList : Inherits List(Of String) 

End Class 

et en remplaçant les occurrences de celui-ci dans mes contrats comme:

<MessageContract(WrapperName:="getLimited")> _ 
Public Class GetLimitedRequest 
    Inherits GetRequest 

    Protected _propertyList As PropertyList 

    <MessageBodyMember(Namespace:=Api2Information.Namespace)> _ 
    Public Property PropertyList() As PropertyList 
    ... 
End Class 

produit la sortie:

<v2:getLimited> 
    <!--Optional:--> 
    <v2:Id>?</v2:Id> 
    <!--Optional:--> 
    <v2:PropertyList> 
     <!--Zero or more repetitions:--> 
     <v2:string>?</v2:string> 
    </v2:PropertyList> 
    <!--Optional:--> 
    <v2:TypeName>?</v2:TypeName> 
    </v2:getLimited> 
+0

Réponse trouvée ici http://msdn.microsoft.com/fr-fr/library/aa347850(v=VS.90).aspx –