Freigeben über


Arbeiten mit Binärdaten (WCF Data Services)

Die WCF Data Services -Clientbibliothek ermöglicht es Ihnen, Binärdaten wie folgt aus einem Open Data Protocol (OData) -Feed abzurufen und zu aktualisieren:

  • Als primitive Typeigenschaft einer Entität. Dies ist die empfohlene Methode für das Arbeiten mit kleinen Binärdatenobjekten, die problemlos in den Arbeitsspeicher geladen werden können. In diesem Fall handelt es sich bei der binären Eigenschaft um eine vom Datenmodell verfügbar gemachte Entitätseigenschaft. Der Datendienst serialisiert die Binärdaten als binär codiertes base64-XML in der Antwortnachricht.

  • Als separater binärer Ressourcenstream. Dies ist die empfohlene Methode für den Zugriff auf BLOB-Daten (Binary Large Object), die ein Foto, Video oder einen beliebigen anderen Typ binär codierter Daten darstellen, und das Ändern dieser Daten.

WCF Data Services implementiert das Streaming von Binärdaten wie in OData definiert mithilfe von HTTP. Bei diesem Mechanismus werden Binärdaten als Medienressource behandelt, die von einer Entität getrennt, aber mit dieser verknüpft ist. Dies wird als Medienlinkeintrag bezeichnet. Weitere Informationen finden Sie unter Streaminganbieter (WCF Data Services).

Ee473426.Tip(de-de,VS.100).gifTipp:
Ein ausführliches Beispiel zum Erstellen einer Windows Presentation Foundation (WPF)-Clientanwendung, die binäre Bilddateien von einem OData -Dienst zum Speichern von Fotos herunterlädt, finden Sie im Beitrag Streaminganbieter für Datendienste Teil 2: Zugreifen auf einen Medienressourcenstream vom Client. Den Beispielcode für den Fotostreaming-Datendienst im Blogbeitrag können Sie unter Fotostreaming-Datendienstbeispiel in der MSDN Code Gallery herunterladen.

Entitätsmetadaten

Eine Entität mit einem verknüpften Medienressourcenstream wird in den Metadaten des Datendiensts angegeben, indem das HasStream-Attribut auf einen Entitätstyp angewendet wird, bei dem es sich um den Medienlinkeintrag handelt. Im folgenden Beispiel ist die PhotoInfo-Entität ein Medienlinkeintrag mit einer verknüpften Medienressource, die durch das HasStream-Attribut angegeben ist.

<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>

Die verbleibenden Beispiele in diesem Thema zeigen, wie Sie auf den Medienressourcenstream zugreifen und ihn ändern. Ein vollständiges Beispiel dazu, wie Sie einen Medienressourcenstream mithilfe der WCF Data Services -Clientbibliothek in einer .NET Framework-Clientanwendung nutzen, finden Sie im Beitrag Zugreifen auf einen Medienressourcenstream vom Client.

Zugreifen auf den binären Ressourcenstream

Die WCF Data Services -Clientbibliothek stellt Methoden für den Zugriff auf binäre Ressourcenstreams von einem OData -basierten Datendienst aus bereit. Wenn Sie eine Medienressource herunterladen, können Sie entweder den URI der Medienressource verwenden oder einen binären Stream abrufen, der die Medienressource selbst enthält. Sie können Medienressourcendaten auch als binären Stream hochladen.

Ee473426.Tip(de-de,VS.100).gifTipp:
Ein ausführliches Beispiel zum Erstellen einer Windows Presentation Foundation (WPF)-Clientanwendung, die binäre Bilddateien von einem OData -Dienst zum Speichern von Fotos herunterlädt, finden Sie im Beitrag Streaminganbieter für Datendienste Teil 2: Zugreifen auf einen Medienressourcenstream vom Client. Den Beispielcode für den Fotostreaming-Datendienst im Blogbeitrag können Sie unter Fotostreaming-Datendienstbeispiel in der MSDN Code Gallery herunterladen.

Abrufen des URI des binären Streams

Beim Abrufen bestimmter Medienressourcentypen wie Bildern und anderen Mediendateien ist es oft einfacher, den URI der Medienressource in der Anwendung zu verwenden, anstatt den binären Datenstrom selbst zu behandeln. Zum Abrufen des URI des zugehörigen Ressourcenstreams eines Medienlinkeintrags müssen Sie die GetReadStreamUri-Methode für die DataServiceContext-Instanz aufrufen, von der die Entität nachverfolgt wird. Das folgende Beispiel zeigt, wie Sie die GetReadStreamUri-Methode aufrufen, um den URI eines Medienressourcenstreams abzurufen, mit dem auf dem Client ein neues Bild erstellt wird:

' 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));

Herunterladen des binären Ressourcenstreams

Wenn Sie einen binären Ressourcenstream abrufen, müssen Sie die GetReadStream-Methode für die DataServiceContext-Instanz aufrufen, von der die Entität nachverfolgt wird. Diese Methode sendet eine Anforderung an den Datendienst, der ein DataServiceStreamResponse-Objekt mit einem Verweis auf den Stream mit der Ressource zurückgibt. Verwenden Sie diese Methode, wenn die Anwendung die binäre Ressource als Stream erfordert. Das folgende Beispiel zeigt, wie Sie die GetReadStream-Methode aufrufen, um einen Stream abzurufen, mit dem auf dem Client ein neues Bild erstellt wird:

Ee473426.note(de-de,VS.100).gifHinweis:
Der Content-Length-Header der Antwortnachricht, die den binären Datenstrom enthält, wird nicht vom Datendienst festgelegt. Dieser Wert entspricht möglicherweise nicht der tatsächlichen Länge des binären Datenstroms.

Hochladen einer Medienressource als Stream

Um eine Medienressource einzufügen oder zu aktualisieren, rufen Sie die SetSaveStream-Methode für die DataServiceContext-Instanz auf, von der die Entität nachverfolgt wird. Diese Methode sendet eine Anforderung an den Datendienst, die die aus dem angegebenen Stream gelesene Medienressource enthält. Das folgende Beispiel zeigt, wie Sie die SetSaveStream-Methode aufrufen, um ein Bild an den Datendienst zu senden:

' 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);

In diesem Beispiel wird die SetSaveStream-Methode aufgerufen, indem der Wert true für den closeStream-Parameter angegeben wird. Dadurch wird sichergestellt, dass der DataServiceContext den Stream nach dem Hochladen der Binärdaten in den Datendienst schließt.

Ee473426.note(de-de,VS.100).gifHinweis:
Wenn Sie SetSaveStream aufrufen, wird der Stream erst beim Aufrufen von SaveChanges an den Datendienst gesendet.

Siehe auch

Konzepte

Binden von Daten an Steuerelemente (WCF Data Services)

Weitere Ressourcen

WCF Data Services-Clientbibliothek