Utilizzo di dati binari (WCF Data Services)
La libreria client WCF Data Services consente di recuperare e aggiornare i dati binari da un feed OData (Open Data Protocol) in una delle modalità seguenti:
Come proprietà di tipo primitivo di un'entità. Si tratta del metodo consigliato per l'utilizzo di oggetti dati binari di dimensioni ridotte che possono essere caricati facilmente in memoria. 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.
Come flusso separato di risorse binarie. 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.
WCF Data Services implementa il flusso di dati binari tramite HTTP come definito in OData . In questo meccanismo i dati binari vengono trattati come una risorsa multimediale separata ma correlata a un'entità denominata entry di collegamento multimediale (Media Link Entry). Per ulteriori informazioni, vedere Provider di flusso (WCF Data Services).
![]() |
---|
Per un esempio dettagliato di come creare un'applicazione client Windows Presentation Foundation (WPF) che scarica file di immagine binari da un servizio OData che archivia foto, vedere l'argomento Serie provider di flusso di servizi dati: accesso a un flusso di risorsa multimediale dal client (parte 2). Per scaricare il codice di esempio per il servizio dati di foto di flusso rappresentato nel post di blog, vedere Esempio di servizio dati di foto di flusso in MSDN Code Gallery. |
Metadati dell'entità
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. Nell'esempio seguente, l'entità PhotoInfo
è una voce di collegamento multimediale che dispone di una risorsa multimediale correlata, indicata dall'attributo 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>
Negli esempi restanti di questo argomento viene illustrato come accedere e modificare il flusso di risorsa multimediale. Per un esempio completo su come utilizzare un flusso di risorsa multimediale in un'applicazione client .NET Framework tramite la libreria client WCF Data Services , vedere l'argomento Accesso al flusso di risorsa multimediale dal client.
Accesso al flusso di risorsa binaria
La libreria client WCF Data Services fornisce i metodi per l'accesso ai flussi di risorse binarie da un servizio dati basato su OData . Quando si scarica una risorsa multimediale, è possibile utilizzare l'URI della risorsa multimediale od ottenere un flusso binario contenente i dati della risorsa multimediale. È possibile caricare i dati della risorsa multimediale anche come un flusso binario.
![]() |
---|
Per un esempio dettagliato di come creare un'applicazione client Windows Presentation Foundation (WPF) che scarica file di immagine binari da un servizio OData che archivia foto, vedere l'argomento Serie provider di flusso di servizi dati: accesso a un flusso di risorsa multimediale dal client (parte 2). Per scaricare il codice di esempio per il servizio dati di foto di flusso rappresentato nel post di blog, vedere Esempio di servizio dati di foto di flusso in MSDN Code Gallery. |
Recupero dell'URI del flusso binario
Quando si recuperano determinati tipi di risorse multimediali, ad esempio immagini e altri file multimediali, è spesso più semplice utilizzare l'URI della risorsa multimediale nell'applicazione anziché gestire il flusso di dati binari. 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à. Nell'esempio seguente viene mostrato come chiamare il metodo GetReadStreamUri per ottenere l'URI di un flusso di risorsa multimediale utilizzato per creare una nuova immagine nel 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 binaria
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. Questo metodo invia una richiesta al servizio dati che restituisce un oggetto DataServiceStreamResponse che presenta un riferimento al flusso contenente la risorsa. Utilizzare questo metodo quando l'applicazione richiede la risorsa binaria come Stream. Nell'esempio seguente viene mostrato come chiamare il metodo GetReadStream per recuperare un flusso utilizzato per creare una nuova immagine nel client:
![]() |
---|
L'intestazione Content-Length nel messaggio di risposta che contiene il flusso binario non è impostata dal servizio dati. È possibile che questo valore non rifletta la lunghezza effettiva del flusso di dati binari. |
Caricamento di una risorsa multimediale come flusso
Per inserire o aggiornare una risorsa multimediale, chiamare il metodo SetSaveStream sull'istanza DataServiceContext che tiene traccia dell'entità. Questo metodo invia una richiesta al servizio dati che contiene la risorsa multimediale letta dal flusso fornito. Nell'esempio seguente viene indicato come chiamare il metodo SetSaveStream per inviare un'immagine al servizio dati:
' 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. Ciò garantisce che DataServiceContext chiuda il flusso dopo aver caricato i dati binari nel servizio dati.
![]() |
---|
Quando si chiama SetSaveStream, il flusso non viene inviato al servizio dati fino a quando non viene chiamato il metodo SaveChanges. |
Vedere anche
Concetti
Associazione di dati a controlli (WCF Data Services)