Esporta (0) Stampa
Espandi tutto

Connessione a Media Services con Media Services SDK

Aggiornamento: ottobre 2014

In questo argomento viene descritto come ottenere una connessione a Servizi multimediali di Microsoft Azure a livello di codice quando si programma con Servizi multimediali SDK for .NET.

Gli aspetti trattati sono i seguenti:

Per connettersi a Servizi multimediali a livello di codice, è necessario prima definire un account di Azure, configurare Servizi multimediali in tale account e quindi impostare un progetto di Visual Studio per lo sviluppo con Servizi multimediali SDK for .NET. Per ulteriori informazioni, vedere Installazione per lo sviluppo in Media Services SDK per .NET.

Al termine del processo di impostazione dell'account di Servizi multimediali, si ottengono i valori di connessione necessari elencati di seguito. Utilizzarli per creare connessioni a Servizi multimediali a livello di codice.

  • Nome dell'account di Servizi multimediali.

  • Chiave dell'account di Servizi multimediali.

noteNota
Per trovare questi valori, accedere al portale di Windows Azure, selezionare il proprio account di Media Services e fare clic sull'icona per la gestione delle chiavi nella parte inferiore della finestra del portale. Se si fa clic sull'icona accanto a ogni casella di testo, il valore viene copiato negli Appunti del sistema.

Per iniziare a eseguire la programmazione basata su Servizi multimediali, è necessario creare un'istanza di CloudMediaContext che rappresenti il contesto del server. CloudMediaContext include riferimenti a importanti raccolte contenenti processi, asset, file, criteri di accesso, localizzatori e altri oggetti.

noteNota
La classe CloudMediaContext non di tipo thread-safe. È necessario creare un nuovo CloudMediaContext per thread o per set di operazioni.

CloudMediaContext include cinque overload del costruttore. Si consiglia di utilizzare costruttori che accettano MediaServicesCredentials come parametro. Per ulteriori informazioni, vedere Riutilizzo di token del Servizio di controllo di accesso.

  • L'overload che segue inizializza una nuova istanza della classe CloudMediaContext con il nome e la chiave dell'account di Servizi multimediali di Microsoft Azure specificati tramite cui eseguire l'autenticazione.

    public CloudMediaContext(string accountName, string accountKey)
    
  • L'overload che segue inizializza una nuova istanza della classe CloudMediaContext con le credenziali di Servizi multimediali di Microsoft Azure specificate. Questo overload è stato aggiunto in Media Services Client SDK versione 3.0.0.0.

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • L'overload che segue inizializza una nuova istanza della classe CloudMediaContext con l'endpoint di Servizi multimediali di Microsoft Azure e le credenziali di Servizi multimediali specificati. Questo overload è stato aggiunto in Media Services Client SDK versione 3.0.0.0.

    public CloudMediaContext(Uri apiServer, MediaServicesCredentials credentials)
    
  • L'overload che segue inizializza una nuova istanza della classe CloudMediaContext con l'endpoint nonché il nome e la chiave dell'account di Servizi multimediali di Microsoft Azure specificati tramite cui eseguire l'autenticazione.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey)
    
  • L'overload che segue inizializza una nuova istanza della classe CloudMediaContext che accetta i seguenti parametri: endpoint nonché nome e chiave dell'account di Servizi multimediali tramite cui eseguire l'autenticazione, ambito di autorizzazione ed endpoint del Servizio di controllo di accesso con cui eseguire l'autenticazione.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey, string scope, string acsBaseAddress)
    

Nell'esempio che segue viene creata una nuova istanza di CloudMediaContext e vengono passati i valori di stringa del nome e della chiave dell'account di Media Services.

CloudMediaContext context = new CloudMediaContext(MediaServicesAccountName, MediaServicesAccountKey);

Nella sezione successiva viene illustrato come riutilizzare token del Servizio di controllo di accesso mediante costruttori di CloudMediaContext che accettano MediaServicesCredentials come parametro.

Controllo di accesso di Windows Azure Active Directory, anche noto come Servizio di controllo di accesso o ACS, è un servizio basato sul cloud che consente di autenticare e autorizzare utenti in modo semplificato per l'accesso alle rispettive applicazioni Web. Per controllare l'accesso ai servizi di Servizi multimediali di Microsoft Azure viene utilizzato il protocollo OAuth, che richiede un token ACS. I token ACS ricevuti da Servizi multimediali provengono da un server di autorizzazione.

Quando si utilizza Servizi multimediali SDK per lo sviluppo, è possibile scegliere di gestire i token in modo automatico tramite il codice dell'SDK. La gestione totalmente automatica dei token ACS da parte dell'SDK genera tuttavia richieste di token non necessarie, le quali comportano un utilizzo di risorse di client e server e richiedono tempo. Inoltre, il server ACS limita le richieste se la velocità è troppo elevata. Il limite è di 30 richieste al secondo. Per ulteriori informazioni, vedere Limitazioni del servizio ACS.

A partire da Media Services SDK versione 3.0.0.0, è possibile riutilizzare i token ACS. I costruttori di CloudMediaContext che accettano MediaServicesCredentials come parametro permettono di condividere i token ACS in più contesti. La classe MediaServicesCredentials incapsula le credenziali di Servizi multimediali. Se è disponibile un token ACS e la relativa scadenza è nota, è possibile creare una nuova istanza di MediaServicesCredentials con tale token e passarla al costruttore di CloudMediaContext. Si tenga presente che i token vengono aggiornati automaticamente da Servizi multimediali SDK alla relativa scadenza. Esistono due modi per riutilizzare i token ACS, come illustrato negli esempi seguenti.

  • È possibile memorizzare nella cache l'oggetto MediaServicesCredentials in memoria, ad esempio, in una variabile di classe statica. Occorre quindi passare l'oggetto memorizzato nella cache al costruttore CloudMediaContext. L'oggetto MediaServicesCredentials contiene un token ACS che può essere riutilizzato, se ancora valido. Se il token non è valido, verrà aggiornato da Servizi multimediali SDK utilizzando le credenziali fornite al costruttore MediaServicesCredentials.

    Si noti che l'oggetto MediaServicesCredentials ottiene un token valido dopo la chiamata a RefreshToken. CloudMediaContext chiama il metodo RefreshToken nel costruttore. Se si intende salvare i valori del token in una risorsa di archiviazione esterna, assicurarsi di verificare che il valore di TokenExpiration sia valido prima di salvare i dati del token. In caso contrario, chiamare RefreshToken prima della memorizzazione nella cache.

    // Create and cache the Media Services credentials in a static class variable. _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName, _mediaServicesAccountKey); 
    


    // Use the cached credentials to create a new CloudMediaContext object. if(_cachedCredentials == null) {     _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName, _mediaServicesAccountKey); }  CloudMediaContext context = new CloudMediaContext(_cachedCredentials);
    
  • È possibile memorizzare nella cache anche la stringa AccessToken e i valori di TokenExpiration. Questi ultimi potranno essere utilizzati in un secondo momento per creare un oggetto MediaServicesCredentials con i dati del token memorizzati nella cache. Ciò è particolarmente utile in scenari in cui il token può essere condiviso in modo sicuro tra più processi o computer.

    Il seguente frammento di codice chiama i metodi SaveTokenDataToExternalStorage, GetTokenDataFromExternalStorage e UpdateTokenDataInExternalStorageIfNeeded non definiti nel presente esempio. È possibile definire tali metodi per archiviare, recuperare e aggiornare i dati del token in una risorsa di archiviazione esterna.

     CloudMediaContext context1 = new CloudMediaContext(_mediaServicesAccountName, _mediaServicesAccountKey);  // Get token values from the context. var accessToken = context1.Credentials.AccessToken; var tokenExpiration = context1.Credentials.TokenExpiration;  // Save token values for later use.  // The SaveTokenDataToExternalStorage method should check  // whether the TokenExpiration value is valid before saving the token data.  // If it is not valid, call MediaServicesCredentials’s RefreshToken before caching. SaveTokenDataToExternalStorage(accessToken, tokenExpiration); 
    
    Utilizzare i valori del token salvati per creare MediaServicesCredentials.

    var accessToken = ""; var tokenExpiration = DateTime.UtcNow;  // Retrieve saved token values. GetTokenDataFromExternalStorage(out accessToken, out tokenExpiration);  // Create a new MediaServicesCredentials object using saved token values. MediaServicesCredentials credentials = new MediaServicesCredentials(_mediaServicesAccountName, _mediaServicesAccountKey) {     AccessToken = accessToken,     TokenExpiration = tokenExpiration };  CloudMediaContext context2 = new CloudMediaContext(credentials);
    
    Aggiornare la copia del token nel caso in cui il token sia stato aggiornato da Media Services SDK.

    if(tokenExpiration != context2.Credentials.TokenExpiration) {     UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration); } 
    
  • Se si dispone di più account Media Services, ad esempio a scopo di condivisione del carico o di distribuzione geografica, è possibile memorizzare nella cache oggetti MediaServicesCredentials utilizzando la raccolta System.Collections.Concurrent.ConcurrentDictionary (la raccolta ConcurrentDictionary rappresenta una raccolta thread-safe di coppie chiave/valore a cui possono accedere più thread contemporaneamente). È quindi possibile utilizzare il metodo GetOrAdd per ottenere le credenziali memorizzate nella cache.

    // Declare a static class variable of the ConcurrentDictionary type in which the Media Services credentials will be cached.   private static readonly ConcurrentDictionary<string, MediaServicesCredentials> mediaServicesCredentialsCache =      new ConcurrentDictionary<string, MediaServicesCredentials>();
    
    // Cache (or get already cached) Media Services credentials. Use these credentials to create a new CloudMediaContext object. static public CloudMediaContext CreateMediaServicesContext(string accountName, string accountKey) {     CloudMediaContext cloudMediaContext;     MediaServicesCredentials mediaServicesCredentials;      mediaServicesCredentials = mediaServicesCredentialsCache.GetOrAdd(         accountName,         valueFactory => new MediaServicesCredentials(accountName, accountKey));      cloudMediaContext = new CloudMediaContext(mediaServicesCredentials);      return cloudMediaContext; }
    

È una procedura consigliata archiviare nella configurazione i valori di connessione, soprattutto dati sensibili quali il nome account e la password. È inoltre consigliabile crittografare i dati di configurazione sensibili. È possibile crittografare l'intero file di configurazione utilizzando il sistema EFS (Encrypting File System) di Windows. Per abilitare EFS in un file, fare clic con il pulsante destro del mouse sul file, scegliere Proprietà e abilitare la crittografia nella scheda delle impostazioni Avanzate. In alternativa, è possibile creare una soluzione personalizzata per crittografare parti selezionate di un file di configurazione utilizzando una configurazione protetta. Vedere Crittografia delle informazioni di configurazione tramite la configurazione protetta.

Nel file App.config riportato di seguito sono contenuti i valori di connessione necessari. I valori nell'elemento <appSettings> sono i valori necessari che si ottengono dal processo di configurazione dell'account Servizi multimediali.

<?xml version="1.0" encoding="utf-8" ?> <configuration>     <startup>          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />     </startup>   <appSettings>     <add key="MediaServicesAccountName" value="Add-Media-Services-Account-Name" />     <add key="MediaServicesAccountKey" value="Add-Media-Services-Account-Key" />   </appSettings> </configuration> 

Per recuperare i valori di connessione dalla configurazione, è possibile utilizzare la classe ConfigurationManager e quindi assegnare i valori ai campi nel codice:

private static readonly string _accountName = ConfigurationManager.AppSettings["MediaServicesAccountName"]; private static readonly string _accountKey = ConfigurationManager.AppSettings["MediaServicesAccountKey"]; 

A questo punto si è pronti per passare all'argomento successivo: Inserimento di asset con Media Services SDK for .NET.

Vedere anche

Mostra:
© 2014 Microsoft