Partager via


Utilisation de données binaires (WCF Data Services)

La bibliothèque cliente Services de données WCF vous permet de récupérer et de mettre à jour les données binaires d'un flux Protocole OData (Open Data) de l'une des façons suivantes :

  • Comme une propriété de type primitif d'entité. Il s'agit de la méthode conseillée lors de l'utilisation de petits objets de données binaires, faciles à charger en mémoire. Dans ce cas, la propriété binaire est une propriété d'entité exposée par le modèle de données, et le service de données sérialise les données binaires sous forme de XML binaire encodé Base 64 dans le message de réponse.

  • Comme un flux distinct de ressources binaires. Ceci est la méthode conseillée pour l'accès et la modification de données d'objet BLOB (binary large object) qui peuvent représenter des photos, des vidéos ou tout autre type de données binaires encodées.

Services de données WCF implémente la diffusion en continu de données binaires en utilisant le protocole HTTP comme défini dans le protocole OData . Dans ce mécanisme, les données binaires sont traitées comme une ressource multimédia distincte mais liée à une entité, appelée une entrée de lien média. Pour plus d'informations, consultez Fournisseurs de diffusion en continu (WCF Data Services).

Ee473426.Tip(fr-fr,VS.100).gifConseil :
Pour un exemple pas à pas de création d'une application cliente Windows Presentation Foundation (WPF) qui télécharge des fichiers d'image binaires depuis un service OData stockant des photos, consultez la publication Série Fournisseur de diffusion en continu Data Services-Partie 2 : Accès à un flux de ressources multimédia à partir du client. Pour télécharger l'exemple de code du service de données de diffusion en continu de photos, consultez la publication de blog suivante : Exemple de service de diffusion de données en continu de photos dans MSDN Code Gallery.

Métadonnées d'entité

Une entité qui possède un flux de ressources multimédia lié est signalée dans les métadonnées du service de données par l'attribut HasStream appliqué à un type d'entité qui est l'entrée de lien média. Dans l'exemple suivant, l'entité PhotoInfo est une entrée de lien média qui possède une ressource multimédia liée, signalée par l'attribut HasStream.

<EntityType xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
            Name="PhotoInfo" m:HasStream="true">
  <Key>
    <PropertyRef Name="PhotoId" />
  </Key>
  <Property Name="PhotoId" Type="Int32" Nullable="false" 
            annotation:StoreGeneratedPattern="Identity" />
  <Property Name="FileName" Type="String" Nullable="false" />
  <Property Name="FileSize" Type="Int32" Nullable="true" />
  <Property Name="DateTaken" Type="DateTime" Nullable="true" />
  <Property Name="TakenBy" Type="String" Nullable="true" />
  <Property Name="DateAdded" Type="DateTime" Nullable="false" />
  <Property Name="Exposure" Type="PhotoData.Exposure" Nullable="false" />
  <Property Name="Dimensions" Type="PhotoData.Dimensions" Nullable="false" />
  <Property Name="DateModified" Type="DateTime" Nullable="false" />
  <Property Name="Comments" Type="String" MaxLength="Max" 
            FixedLength="false" Unicode="true" />
  <Property Name="ContentType" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
</EntityType>

Les autres exemples de cette rubrique indiquent comment accéder et modifier le flux de ressources multimédia. Pour un exemple complet de consommation d'un flux de ressources multimédia dans une application cliente .NET Framework en utilisant la bibliothèque cliente Services de données WCF , consultez la publication Accès à un flux de ressources multimédia à partir du client.

Accès au flux de ressources binaires

La bibliothèque cliente Services de données WCF offre des méthodes pour accéder aux flux de ressources multimédia depuis un service de données basé sur OData . Lors du téléchargement d'une ressource multimédia, vous pouvez utiliser l'URI de la ressource multimédia ou bien vous pouvez obtenir un flux binaire qui contient les données de la ressource multimédia elle-même. Vous pouvez également télécharger les données de la ressource multimédia sous la forme d'un flux binaire.

Ee473426.Tip(fr-fr,VS.100).gifConseil :
Pour un exemple pas à pas de création d'une application cliente Windows Presentation Foundation (WPF) qui télécharge des fichiers d'image binaires depuis un service OData stockant des photos, consultez la publication Série Fournisseur de diffusion en continu Data Services-Partie 2 : Accès à un flux de ressources multimédia à partir du client. Pour télécharger l'exemple de code du service de données de diffusion en continu de photos, consultez la publication de blog suivante : Exemple de service de diffusion de données en continu de photos dans MSDN Code Gallery.

Obtenir l'URI du flux binaire

Lorsque vous récupérez certains types de ressources multimédia, tels que des images et d'autres fichiers multimédia, il est souvent plus facile d'utiliser l'URI de la ressource média de votre application que le flux de données binaires lui-même. Pour obtenir l'URI d'un flux de ressources associé à une entrée de lien média donnée, vous devez appeler la méthode GetReadStreamUri sur l'instance DataServiceContext qui suit l'entité. L'exemple suivant illustre comment appeler la méthode GetReadStreamUri pour obtenir l'URI d'un flux de ressources multimédia utilisé pour créer une nouvelle image sur le client :

' Use the ReadStreamUri of the Media Resource for selected PhotoInfo object
' as the URI source of a new bitmap image.
photoImage.Source = New BitmapImage(context.GetReadStreamUri(currentPhoto))
// Use the ReadStreamUri of the Media Resource for selected PhotoInfo object
// as the URI source of a new bitmap image.
photoImage.Source = new BitmapImage(context.GetReadStreamUri(currentPhoto));

Téléchargement d'un flux de ressources binaires

Lorsque vous récupérez un flux de ressources binaires, vous devez appeler la méthode GetReadStream sur l'instance DataServiceContext qui effectue le suivi de l'entrée de lien média. Cette méthode envoie une demande au service de données qui retourne un objet DataServiceStreamResponse, lequel possède une référence au flux de données qui contient la ressource. Utilisez cette méthode lorsque votre application nécessite que la ressource binaire soit un Stream. L'exemple suivant illustre comment appeler la méthode GetReadStream pour récupérer un flux utilisé pour créer une nouvelle image sur le client :

Ee473426.note(fr-fr,VS.100).gifRemarque :
L'en-tête Content-Length du message de réponse qui contient le flux binaire en continu n'est pas défini par le service de données. Cette valeur ne peut pas refléter la longueur réelle du flux de données binaires en continu.

Téléchargement d'une ressource multimédia comme un flux

Pour insérer ou mettre à jour une ressource multimédia, appelez la méthode SetSaveStream sur l'instance DataServiceContext qui effectue le suivi de l'entité. Cette méthode envoie une demande au service de données qui contient la ressource multimédia lue depuis le flux de données fourni. L'exemple suivant indique comment appeler la méthode SetSaveStream pour envoyer une image au service de données :

' Set the file stream as the source of binary stream 
' to send to the data service. The Slug header is the file name and
' the content type is determined from the file extension. 
' A value of 'true' means that the stream is closed by the client when 
' the upload is complete.
context.SetSaveStream(photoEntity, imageStream, True, _
    photoEntity.ContentType, photoEntity.FileName)
// Set the file stream as the source of binary stream 
// to send to the data service. The Slug header is the file name and
// the content type is determined from the file extension. 
// A value of 'true' means that the stream is closed by the client when 
// the upload is complete.
context.SetSaveStream(photoEntity, imageStream, true,
    photoEntity.ContentType, photoEntity.FileName);

Dans cet exemple, la méthode SetSaveStream est appelée en fournissant une valeur true pour le paramètre closeStream. Cela garantit que l'objet DataServiceContext ferme le flux de données une fois les données binaires téléchargées sur le service de données.

Ee473426.note(fr-fr,VS.100).gifRemarque :
Lorsque vous appelez SetSaveStream, le flux n'est pas transmis au service de données jusqu'à ce que la méthode SaveChanges soit appelée.

Voir aussi

Concepts

Liaison des données aux contrôles (WCF Data Services)

Autres ressources

Bibliothèque cliente de WCF Data Services