OVH Cloud OVH Cloud

Collection typé avec webservice

4 réponses
Avatar
David Bouchard
Je cherche à passé une collection typé via un webservice mais je me retrouve
avec un tableau d'object. Est-ce possible de passer directement une
collection typé.

Example, passer cette collection

<Serializable()> Public Class Employes

Inherits CollectionBase

Public Sub Add(ByVal Employe As Employe)

Me.List.Add(Employe)

End Sub

Default Public ReadOnly Property Item(ByVal Index As Integer) As Employe

Get

Return CType(Me.List.Item(Index), Employe)

End Get

End Property

End Class

<Serializable()> Public Class Employe

Private _ID As Integer

Private _Nom As String

Public Property ID() As Integer

Get

Return _ID

End Get

Set(ByVal Value As Integer)

_ID = Value

End Set

End Property

Public Property Nom() As String

Get

Return _Nom

End Get

Set(ByVal Value As String)

_Nom = Value

End Set

End Property

End Class



Merci

David

4 réponses

Avatar
Osman MALIK [MS]
Bonjour,

Votre application cliente possède-t-elle la définition des classes Employes
et Employe?

Vous trouverez ici des informations présentant comment implémenter des
collections typées à échanger par le biais de Web Services:
http://builder.com.com/5100-6373-1050004.html

Cordialement,

Osman MALIK
Microsoft France

"David Bouchard" wrote in message
news:%
Je cherche à passé une collection typé via un webservice mais je me
retrouve avec un tableau d'object. Est-ce possible de passer directement
une collection typé.

Example, passer cette collection

<Serializable()> Public Class Employes

Inherits CollectionBase

Public Sub Add(ByVal Employe As Employe)

Me.List.Add(Employe)

End Sub

Default Public ReadOnly Property Item(ByVal Index As Integer) As Employe

Get

Return CType(Me.List.Item(Index), Employe)

End Get

End Property

End Class

<Serializable()> Public Class Employe

Private _ID As Integer

Private _Nom As String

Public Property ID() As Integer

Get

Return _ID

End Get

Set(ByVal Value As Integer)

_ID = Value

End Set

End Property

Public Property Nom() As String

Get

Return _Nom

End Get

Set(ByVal Value As String)

_Nom = Value

End Set

End Property

End Class



Merci

David




Avatar
David Bouchard
Merci pour ton intervention, par contre, je ne trouve pas de réponse à ma
question puisque ce site explique comment concevoir une collection fortement
typé, ce que je fais déjà, mais il ne parle pas de WebServices.

Merci
David

"Osman MALIK [MS]" a écrit dans le message de
news: u7f25$
Bonjour,

Votre application cliente possède-t-elle la définition des classes
Employes et Employe?

Vous trouverez ici des informations présentant comment implémenter des
collections typées à échanger par le biais de Web Services:
http://builder.com.com/5100-6373-1050004.html

Cordialement,

Osman MALIK
Microsoft France

"David Bouchard" wrote in message
news:%
Je cherche à passé une collection typé via un webservice mais je me
retrouve avec un tableau d'object. Est-ce possible de passer directement
une collection typé.

Example, passer cette collection

<Serializable()> Public Class Employes

Inherits CollectionBase

Public Sub Add(ByVal Employe As Employe)

Me.List.Add(Employe)

End Sub

Default Public ReadOnly Property Item(ByVal Index As Integer) As Employe

Get

Return CType(Me.List.Item(Index), Employe)

End Get

End Property

End Class

<Serializable()> Public Class Employe

Private _ID As Integer

Private _Nom As String

Public Property ID() As Integer

Get

Return _ID

End Get

Set(ByVal Value As Integer)

_ID = Value

End Set

End Property

Public Property Nom() As String

Get

Return _Nom

End Get

Set(ByVal Value As String)

_Nom = Value

End Set

End Property

End Class



Merci

David








Avatar
Nicolas Moreau [MS]
Bonjour,

Les WebServices utilisent la sérialisation XML (XMLSerializer)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxmlserializationwithwebservices.asp

Lorsqu'une classe implémente ICollection ou IEnumerable, le framework ne XML
sérialise que les éléments dans la collection.
Les propriétés ne sont pas sérialisées. (Ca ne répond pas encore à ta
question ;-)
On ne retrouve alors pas la classe typée en face (By design, et ca répond à
ta question :-)
Positionner des attributs sur la classe ne permet pas de récupérer d'objet
type.
Autre contrainte, les classes doivent disposer d'un constructeur vide
public.

La solution est donc de créer un type Employes qui n'hérite pas de
BaseCollection.
De lui positionner une propriété avec un tableau d'Employee[]
De positionner sur cette propriété attribut :
<System.Xml.Serialization.XmlArrayItemAttribute("Employe", typeof(Employe))>
D'ajouter des méthodes add, ....

Cela permet de :
- Récupérer l'ensemble des données (aucune propriété ne manque)
- Récupérer des classes typées utilisables sur le client.

Quelques pointeurs qui permettent de partir dans les bonnes directions
lorsque l'on doit faire des classes "exportables" en Webservice :
Examples of XML Serialization :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconanexampleofxmlserializationwithxmlserializer.asp
INFO: Roadmap for XML Serialization in the .NET Framework :
http://support.microsoft.com/kb/314150/EN-US/

Bonne continuation.
Nicolas Moreau
Microsoft France.



"David Bouchard" a écrit dans le message de news:

Merci pour ton intervention, par contre, je ne trouve pas de réponse à ma
question puisque ce site explique comment concevoir une collection
fortement typé, ce que je fais déjà, mais il ne parle pas de WebServices.

Merci
David

"Osman MALIK [MS]" a écrit dans le message
de news: u7f25$
Bonjour,

Votre application cliente possède-t-elle la définition des classes
Employes et Employe?

Vous trouverez ici des informations présentant comment implémenter des
collections typées à échanger par le biais de Web Services:
http://builder.com.com/5100-6373-1050004.html

Cordialement,

Osman MALIK
Microsoft France

"David Bouchard" wrote in message
news:%
Je cherche à passé une collection typé via un webservice mais je me
retrouve avec un tableau d'object. Est-ce possible de passer directement
une collection typé.

Example, passer cette collection

<Serializable()> Public Class Employes

Inherits CollectionBase

Public Sub Add(ByVal Employe As Employe)

Me.List.Add(Employe)

End Sub

Default Public ReadOnly Property Item(ByVal Index As Integer) As Employe

Get

Return CType(Me.List.Item(Index), Employe)

End Get

End Property

End Class

<Serializable()> Public Class Employe

Private _ID As Integer

Private _Nom As String

Public Property ID() As Integer

Get

Return _ID

End Get

Set(ByVal Value As Integer)

_ID = Value

End Set

End Property

Public Property Nom() As String

Get

Return _Nom

End Get

Set(ByVal Value As String)

_Nom = Value

End Set

End Property

End Class



Merci

David












Avatar
David Bouchard
Parfait, ca répond à ma question.
Merci

David

"Nicolas Moreau [MS]" a écrit dans le message
de news: %236l$
Bonjour,

Les WebServices utilisent la sérialisation XML (XMLSerializer)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconxmlserializationwithwebservices.asp

Lorsqu'une classe implémente ICollection ou IEnumerable, le framework ne
XML sérialise que les éléments dans la collection.
Les propriétés ne sont pas sérialisées. (Ca ne répond pas encore à ta
question ;-)
On ne retrouve alors pas la classe typée en face (By design, et ca répond
à ta question :-)
Positionner des attributs sur la classe ne permet pas de récupérer d'objet
type.
Autre contrainte, les classes doivent disposer d'un constructeur vide
public.

La solution est donc de créer un type Employes qui n'hérite pas de
BaseCollection.
De lui positionner une propriété avec un tableau d'Employee[]
De positionner sur cette propriété attribut :
<System.Xml.Serialization.XmlArrayItemAttribute("Employe",
typeof(Employe))>
D'ajouter des méthodes add, ....

Cela permet de :
- Récupérer l'ensemble des données (aucune propriété ne manque)
- Récupérer des classes typées utilisables sur le client.

Quelques pointeurs qui permettent de partir dans les bonnes directions
lorsque l'on doit faire des classes "exportables" en Webservice :
Examples of XML Serialization :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconanexampleofxmlserializationwithxmlserializer.asp
INFO: Roadmap for XML Serialization in the .NET Framework :
http://support.microsoft.com/kb/314150/EN-US/

Bonne continuation.
Nicolas Moreau
Microsoft France.



"David Bouchard" a écrit dans le message de
news:
Merci pour ton intervention, par contre, je ne trouve pas de réponse à ma
question puisque ce site explique comment concevoir une collection
fortement typé, ce que je fais déjà, mais il ne parle pas de WebServices.

Merci
David

"Osman MALIK [MS]" a écrit dans le message
de news: u7f25$
Bonjour,

Votre application cliente possède-t-elle la définition des classes
Employes et Employe?

Vous trouverez ici des informations présentant comment implémenter des
collections typées à échanger par le biais de Web Services:
http://builder.com.com/5100-6373-1050004.html

Cordialement,

Osman MALIK
Microsoft France

"David Bouchard" wrote in message
news:%
Je cherche à passé une collection typé via un webservice mais je me
retrouve avec un tableau d'object. Est-ce possible de passer
directement une collection typé.

Example, passer cette collection

<Serializable()> Public Class Employes

Inherits CollectionBase

Public Sub Add(ByVal Employe As Employe)

Me.List.Add(Employe)

End Sub

Default Public ReadOnly Property Item(ByVal Index As Integer) As
Employe

Get

Return CType(Me.List.Item(Index), Employe)

End Get

End Property

End Class

<Serializable()> Public Class Employe

Private _ID As Integer

Private _Nom As String

Public Property ID() As Integer

Get

Return _ID

End Get

Set(ByVal Value As Integer)

_ID = Value

End Set

End Property

Public Property Nom() As String

Get

Return _Nom

End Get

Set(ByVal Value As String)

_Nom = Value

End Set

End Property

End Class



Merci

David