Utilizzo di dati binari (WCF Data Services)Working with Binary Data (WCF Data Services)

Il WCF Data ServicesWCF Data Services libreria client consente di recuperare e aggiornare i dati binari da un Protocollo OData (Open Data)Open Data Protocol (OData) feed in uno dei modi seguenti:The WCF Data ServicesWCF Data Services client library enables you to retrieve and update binary data from an Protocollo OData (Open Data)Open Data Protocol (OData) feed in one of the following ways:

  • Come proprietà di tipo primitivo di un'entità.As a primitive type property of an entity. Si tratta del metodo consigliato per l'uso di oggetti dati binari di dimensioni ridotte che possono essere caricati facilmente in memoria.This is the recommended method for working with small binary data objects that can be easily loaded into memory. In questo caso, la proprietà binaria è una proprietà dell'entità esposta dal modello di dati e il servizio dati serializza i dati binari come codice XML binario in base 64 nel messaggio di risposta.In this case, the binary property is an entity property exposed by the data model, and the data service serializes the binary data as base-64 binary encoded XML in the response message.

  • Come flusso separato di risorse binarie.As a separate binary resource stream. Si tratta del metodo consigliato per l'accesso e la modifica di dati di oggetti binari di grandi dimensioni (BLOB) che possono rappresentare una foto, un video o qualsiasi altro tipo di dati codificati binari.This is the recommended method for accessing and changing binary large object (BLOB) data that may represent a photo, video, or any other type of binary encoded data.

WCF Data ServicesWCF Data Services implementa il flusso di dati binari tramite HTTP come definito nel ODataOData. implements the streaming of binary data by using HTTP as defined in the ODataOData. In questo meccanismo, dati binari vengano considerati come una risorsa multimediale separata dalle ma correlati a un'entità, che viene chiamata una voce di collegamento multimediale.In this mechanism, binary data is treated as a media resource that is separate from but related to an entity, which is called a media link entry. Per ulteriori informazioni, vedere Provider di flusso.For more information, see Streaming Provider.

Suggerimento

Per un esempio dettagliato di come creare un'applicazione client Windows Presentation Foundation (WPF) che consente di scaricare i file di immagine binari da un ODataOData servizio che archivia foto, vedere il post dati servizi Streaming Provider serie parti 2: l'accesso a un flusso di risorsa multimediale dal Client.For a step-by-step example of how to create a Windows Presentation Foundation (WPF) client application that downloads binary image files from an ODataOData service that stores photos, see the post Data Services Streaming Provider Series-Part 2: Accessing a Media Resource Stream from the Client. Per scaricare il codice di esempio per il servizio di dati di foto di flusso rappresentato nel post di blog, vedere il Streaming di esempio di servizio dati foto in MSDN Code Gallery.To download the sample code for the stream photo data service featured in the blog post, see the Streaming Photo Data Service Sample in MSDN Code Gallery.

Metadati dell'entitàEntity Metadata

Un'entità che dispone di un flusso di risorsa multimediale correlato viene indicata nei metadati del servizio dati dall'attributo HasStream applicato a un tipo di entità che è la voce di collegamento multimediale.An entity that has a related media resource stream is indicated in the data service metadata by the HasStream attribute applied to an entity type that is the media link entry. Nell'esempio seguente, il PhotoInfo entità è una voce di collegamento multimediale che dispone di una risorsa multimediale correlata, indicata dal HasStream attributo.In the following example, the PhotoInfo entity is a media link entry that has a related media resource, indicated by the HasStream attribute.

<EntityType xmlns:m="http://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>

Negli esempi restanti di questo argomento viene illustrato come accedere e modificare il flusso di risorsa multimediale.The remaining examples in this topic show how to access and change the media resource stream. Per un esempio completo di come utilizzare un flusso di risorsa multimediale in un'applicazione client .NET Framework mediante il WCF Data ServicesWCF Data Services libreria client, vedere il post l'accesso a un flusso di risorsa multimediale dal Client.For a complete example of how to consume a media resource stream in a .NET Framework client application by using the WCF Data ServicesWCF Data Services client library, see the post Accessing a Media Resource Stream from the Client.

Accesso al flusso di risorsa binariaAccessing the Binary Resource Stream

La libreria client WCF Data ServicesWCF Data Services fornisce i metodi per l'accesso ai flussi di risorse binarie da un servizio dati basato su ODataOData.The WCF Data ServicesWCF Data Services client library provides methods for accessing binary resource streams from an ODataOData-based data service. Quando si scarica una risorsa multimediale, è possibile usare l'URI della risorsa multimediale od ottenere un flusso binario contenente i dati della risorsa multimediale.When downloading a media resource, you can either use the URI of the media resource or you can get a binary stream that contains the media resource data itself. È possibile caricare i dati della risorsa multimediale anche come un flusso binario.You can also upload media resource data as a binary stream.

Suggerimento

Per un esempio dettagliato di come creare un'applicazione client Windows Presentation Foundation (WPF) che consente di scaricare i file di immagine binari da un ODataOData servizio che archivia foto, vedere il post dati servizi Streaming Provider serie parti 2: l'accesso a un flusso di risorsa multimediale dal Client.For a step-by-step example of how to create a Windows Presentation Foundation (WPF) client application that downloads binary image files from an ODataOData service that stores photos, see the post Data Services Streaming Provider Series-Part 2: Accessing a Media Resource Stream from the Client. Per scaricare il codice di esempio per il servizio di dati di foto di flusso rappresentato nel post di blog, vedere il Streaming di esempio di servizio dati foto in MSDN Code Gallery.To download the sample code for the stream photo data service featured in the blog post, see the Streaming Photo Data Service Sample in MSDN Code Gallery.

Recupero dell'URI del flusso binarioGetting the URI of the Binary Stream

Quando si recuperano determinati tipi di risorse multimediali, ad esempio immagini e altri file multimediali, è spesso più semplice usare l'URI della risorsa multimediale nell'applicazione anziché gestire il flusso di dati binari.When retrieving certain types of media resources, such as images and other media files, it is often easier to use the URI of the media resource in your application than handling the binary data stream itself. Per ottenere l'URI di un flusso di risorsa associato a una data voce di collegamento multimediale, è necessario chiamare il metodo GetReadStreamUri sull'istanza DataServiceContext che tiene traccia dell'entità.To get the URI of a resource stream associated with a give media link entry, you must call the GetReadStreamUri method on the DataServiceContext instance that is tracking the entity. Nell'esempio seguente viene mostrato come chiamare il metodo GetReadStreamUri per ottenere l'URI di un flusso di risorsa multimediale usato per creare una nuova immagine nel client:The following example shows how to call the GetReadStreamUri method to get the URI of a media resource stream that is used to create a new image on the 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))

Download del flusso di risorsa binariaDownloading the Binary Resource Stream

Quando si recupera un flusso di risorsa binaria, è necessario chiamare il metodo GetReadStream sull'istanza di DataServiceContext che tiene traccia della voce di collegamento multimediale.When retrieving a binary resource stream, you must call the GetReadStream method on the DataServiceContext instance that is tracking the media link entry. Questo metodo invia una richiesta al servizio dati che restituisce un oggetto DataServiceStreamResponse che presenta un riferimento al flusso contenente la risorsa.This method sends a request to the data service that returns a DataServiceStreamResponse object, which has a reference to the stream that contains the resource. Usare questo metodo quando l'applicazione richiede la risorsa binaria come Stream.Use this method when your application requires the binary resource as a Stream. Nell'esempio seguente viene mostrato come chiamare il metodo GetReadStream per recuperare un flusso usato per creare una nuova immagine nel client:The following example shows how to call the GetReadStream method to retrieve a stream that is used to create a new image on the client:

// Get the read stream for the Media Resource of the currently selected 
// entity (Media Link Entry).
using (DataServiceStreamResponse response =
    context.GetReadStream(currentEmployee, "image/bmp"))
{
    // Use the returned binary stream to create a bitmap image that is 
    // the source of the image control.
    employeeImage.Source = CreateBitmapFromStream(response.Stream);
}
' Get the read stream for the Media Resource of the currently selected 
' entity (Media Link Entry).
Using response As DataServiceStreamResponse = _
        context.GetReadStream(currentEmployee, "image/bmp")

    ' Use the returned binary stream to create a bitmap image that is 
    ' the source of the image control.
    employeeImage.Source = CreateBitmapFromStream(response.Stream)
End Using

Nota

L'intestazione Content-Length nel messaggio di risposta che contiene il flusso binario non è impostata dal servizio dati.The Content-Length header in the response message that contains the binary steam is not set by the data service. È possibile che questo valore non rifletta la lunghezza effettiva del flusso di dati binari.This value may not reflect the actual length of the binary data stream.

Caricamento di una risorsa multimediale come flussoUploading a Media Resource as a Stream

Per inserire o aggiornare una risorsa multimediale, chiamare il metodo SetSaveStream sull'istanza DataServiceContext che tiene traccia dell'entità.To insert or update a media resource, call the SetSaveStream method on the DataServiceContext instance that is tracking the entity. Questo metodo invia una richiesta al servizio dati che contiene la risorsa multimediale letta dal flusso fornito.This method sends a request to the data service that contains the media resource read from the supplied stream. Nell'esempio seguente viene indicato come chiamare il metodo SetSaveStream per inviare un'immagine al servizio dati:The following example shows how to call the SetSaveStream method to send an image to the data service:

// 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 questo esempio il metodo SetSaveStream viene chiamato fornendo un valore true per il parametro closeStream.In this example, the SetSaveStream method is called by supplying a value of true for the closeStream parameter. Ciò garantisce che DataServiceContext chiuda il flusso dopo aver caricato i dati binari nel servizio dati.This guarantees that the DataServiceContext closes the stream after the binary data is uploaded to the data service.

Nota

Quando si chiama SetSaveStream, il flusso non viene inviato al servizio dati fino a quando non viene chiamato il metodo SaveChanges.When you call SetSaveStream, the stream is not sent to the data service until SaveChanges is called.

Vedere ancheSee Also

Libreria client WCF Data ServicesWCF Data Services Client Library
Associazione di dati a controlliBinding Data to Controls