(0) exportieren Drucken
Alle erweitern

Herstellen einer Verbindung mit Media Services mit dem Media Services SDK

Letzte Aktualisierung: Februar 2014

In diesem Thema wird beschrieben, wie eine programmgesteuerte Verbindung mit Microsoft Azure Media Services abgerufen wird, wenn Sie mit dem Mediendienste SDK für .NET programmieren.

In diesem Thema werden die folgenden Themen behandelt.

Herstellen einer Verbindung mit Media Services

Damit Sie programmgesteuert eine Verbindung mit Mediendienste herstellen können, müssen Sie zuvor ein Azure-Konto eingerichtet, Mediendienste für dieses Konto konfiguriert und ein Visual Studio-Projekt für die Entwicklung mit dem Mediendienste SDK für .NET eingerichtet haben. Weitere Informationen finden Sie unter Installation für die Entwicklung mit dem Media Services SDK für .NET.

Am Ende des Einrichtungsvorgangs für das Mediendienste-Konto haben Sie die folgenden erforderlichen Verbindungswerte abgerufen. Verwenden Sie diese, um programmgesteuerte Verbindungen mit Mediendienste herzustellen.

  • Ihren Mediendienste-Kontonamen.

  • Ihren Mediendienste-Kontoschlüssel.

noteHinweis
Wenn Sie diese Werte ermitteln möchten, navigieren Sie zum Windows Azure-Portal, wählen Sie Ihr Media Services-Konto aus, und klicken Sie dann unten im Portalfenster auf das Symbol "SCHLÜSSEL VERWALTEN". Wenn Sie auf das Symbol neben jedem Textfeld klicken, wird der Wert in die Zwischenablage des Systems kopiert.

Erstellen einer CloudMediaContext-Instanz

Wenn Sie mit der Programmierung für Mediendienste beginnen möchten, müssen Sie eine CloudMediaContext-Instanz erstellen, die den Serverkontext darstellt. Der CloudMediaContext umfasst Verweise auf wichtige Auflistungen, z. B. Aufträge, Medienobjekte, Dateien, Zugriffsrichtlinien und Locator.

noteHinweis
Die Klasse CloudMediaContext ist nicht threadsicher. Sie sollten für jeden Thread oder für jeden Satz von Vorgängen einen neuen CloudMediaContext erstellen.

CloudMediaContext besitzt fünf Konstruktorüberladungen. Es wird empfohlen, Konstruktoren zu verwenden, die MediaServicesCredentials als Parameter annehmen. Weitere Informationen finden Sie unter Reusing Access Control Service Tokens.

  • Die folgende Überladung initialisiert eine neue Instanz der CloudMediaContext-Klasse mit dem angegebenen Microsoft Azure Media Services-Kontonamen und -Kontoschlüssel für die Authentifizierung.

    public CloudMediaContext(string accountName, string accountKey)
    
  • Die folgende Überladung initialisiert eine neue Instanz der CloudMediaContext-Klasse mit den angegebenen Microsoft Azure Media Services-Anmeldeinformationen. Diese Überladung wurde im Media Services Client SDK, Version 3.0.0.0, hinzugefügt.

    public CloudMediaContext(MediaServicesCredentials credentials)
    
  • Die folgende Überladung initialisiert eine neue Instanz der CloudMediaContext-Klasse mit dem angegebenen Microsoft Azure Media Services-Endpunkt und den Mediendienste-Anmeldeinformationen. Diese Überladung wurde im Media Services Client SDK, Version 3.0.0.0, hinzugefügt.

    public CloudMediaContext(Uri apiServer, MediaServicesCredentials credentials)
    
  • Die folgende Überladung initialisiert eine neue Instanz der CloudMediaContext-Klasse mit dem angegebenen Microsoft Azure Media Services-Endpunkt, -Kontonamen und -Kontoschlüssel für die Authentifizierung.

    public CloudMediaContext(Uri apiServer, string accountName, string accountKey)
    
  • Die folgende Überladung initialisiert eine neue Instanz der CloudMediaContext-Klasse, die die folgenden Parameter annimmt: den Mediendienste-Endpunkt, -Kontonamen und -Kontoschlüssel für die Authentifizierung, den Autorisierungsbereich und den Endpunkt des Zugriffssteuerungsdiensts, mit dem die Authentifizierung erfolgt.

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

Das folgende Beispiel erstellt eine neue CloudMediaContext-Instanz und übergibt die Zeichenfolgenwerte des Media Services-Kontonamens und -Schlüssels.

CloudMediaContext context = new CloudMediaContext(MediaServicesAccountName, MediaServicesAccountKey);

Im folgenden Abschnitt wird gezeigt, wie die Token des Zugriffssteuerungsdiensts mithilfe der CloudMediaContext-Konstruktoren wiederverwendet werden, die MediaServicesCredentials als Parameter annehmen.

Wiederverwenden von Token des Zugriffssteuerungsdiensts

Die Windows Azure Active Directory-Zugriffssteuerung (auch als Zugriffssteuerungsdienst oder ACS bezeichnet) ist ein cloudbasierter Dienst, der eine einfache Methode zum Authentifizieren und Autorisieren von Benutzern für den Zugriff auf ihre Webanwendungen bereitstellt. Microsoft Azure Media Services steuert den Zugriff auf die Dienste über das OAuth-Protokoll, das ein ACS-Token erfordert. Mediendienste empfängt die ACS-Token von einem Autorisierungsserver.

Wenn Sie mit dem Mediendienste SDK entwickeln, können Sie wahlweise die Token nicht berücksichtigen, weil der SDK-Code diese für Sie verwaltet. Wenn Sie dem SDK die vollständige Verwaltung der ACS-Token übergeben, führt dies jedoch zu nicht erforderlichen Tokenanforderungen. Das Anfordern von Token kostet Zeit und verbraucht Client- und Serverressourcen. Außerdem drosselt der ACS-Server die Anforderungen, wenn die Rate zu hoch ist. Der Grenzwert sind 30 Anforderungen pro Sekunde. Weitere Details finden Sie unter Einschränkungen des ACS-Diensts.

Ab dem Media Services SDK, Version 3.0.0.0, können Sie die ACS-Token wiederverwenden. Die CloudMediaContext-Konstruktoren, die MediaServicesCredentials als Parameter annehmen, ermöglichen das Freigeben der ACS-Token für mehrere Kontexte. Die MediaServicesCredentials-Klasse kapselt die Mediendienste-Anmeldeinformationen Wenn ein ACS-Token verfügbar und seine Ablaufzeit bekannt ist, können Sie eine neue MediaServicesCredentials-Instanz mit dem Token erstellen und diese an den Konstruktor von CloudMediaContext übergeben. Beachten Sie, dass das Mediendienste SDK Token automatisch aktualisiert, wenn diese ablaufen. Die Beispiele unten zeigen, wie ACS-Token auf zwei verschiedene Arten wiederverwendet werden können.

  • Sie können das MediaServicesCredentials-Objekt im Arbeitsspeicher zwischenspeichern (z. B. in einer Variablen einer statischen Klasse). Übergeben Sie dieses zwischengespeicherte Objekt dann an den Konstruktor CloudMediaContext. Das MediaServicesCredentials-Objekt enthält ein ACS-Token, das wiederverwendet werden kann, wenn es noch gültig ist. Wenn das Token nicht gültig ist, wird es vom Mediendienste SDK mithilfe der an den Konstruktor MediaServicesCredentials übergebenen Anmeldeinformationen aktualisiert.

    Beachten Sie, dass das MediaServicesCredentials-Objekt nach dem Aufruf von RefreshToken ein gültiges Token abruft. CloudMediaContext ruft die Methode RefreshToken im Kontruktor auf. Wenn Sie planen, die Tokenwerte in einem externen Speicher zu speichern, stellen Sie sicher, dass der Wert TokenExpiration gültig ist, bevor Sie die Tokendaten speichern. Wenn er nicht gültig ist, rufen Sie RefreshToken vor dem Zwischenspeichern auf.

    // 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);
    
  • Sie können auch die Zeichenfolge AccessToken und die TokenExpiration-Werte zwischenspeichern. Die Werte können zu einem späteren Zeitpunkt zum Erstellen eines neuen MediaServicesCredentials-Objekts mit den zwischengespeicherten Tokendaten verwendet werden. Dies ist besonders in Szenarien sinnvoll, in denen das Token auf sichere Weise von mehreren Prozessen oder Computern gemeinsam verwendet werden kann.

    Die folgenden Codeausschnitte rufen die Methoden SaveTokenDataToExternalStorage, GetTokenDataFromExternalStorage und UpdateTokenDataInExternalStorageIfNeeded auf, die in diesem Beispiel nicht definiert sind. Sie können diese Methoden so definieren, dass sie Tokendaten in einem externen Speicher speichern bzw. aktualisieren oder aus einem solchen Speicher abrufen.

     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); 
    
    Verwenden Sie die gespeicherten Tokenwerte, um MediaServicesCredentials zu erstellen.

    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);
    
    Aktualisieren Sie die Tokenkopie, wenn das Token vom Media Services SDK aktualisiert wurde.

    if(tokenExpiration != context2.Credentials.TokenExpiration) {     UpdateTokenDataInExternalStorageIfNeeded(accessToken, context2.Credentials.TokenExpiration); } 
    
  • Wenn Sie mehrere Media Services-Konten besitzen (z. B. für Nutzlastverteilungszwecke oder Geo-Verteilung), können Sie MediaServicesCredentials-Objekte mithilfe der System.Collections.Concurrent.ConcurrentDictionary-Auflistung zwischenspeichern (die ConcurrentDictionary-Auflistung stellt eine threadsichere Auflistung von Schlüssel/Wert-Paaren dar, auf die von mehreren Threads gleichzeitig zugegriffen werden kann). Sie können dann die GetOrAdd-Methode zum Abrufen der zwischengespeicherten Anmeldeinformationen verwenden.

    // 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; }
    

Speichern von Verbindungswerten in der Konfiguration

Es wird dringend empfohlen, Verbindungswerte in der Konfiguration zu speichern. Dies gilt insbesondere für sensible Werte, etwa Ihren Kontonamen und das Kennwort. Außerdem wird empfohlen, sensible Konfigurationsdaten zu verschlüsseln. Sie können die gesamte Konfigurationsdatei mithilfe des verschlüsselnden Windows-Dateisystems (EFS) verschlüsseln. Klicken Sie zum Aktivieren von EFS für eine Datei mit der rechten Maustaste auf die Datei, wählen Sie Eigenschaften aus, und aktivieren Sie dann die Verschlüsselung unter den Einstellungen auf der Registerkarte Erweitert. Sie können auch eine benutzerdefinierte Lösung für das Verschlüsseln ausgewählter Teile einer Konfigurationsdatei erstellen, indem Sie eine geschützte Konfiguration verwenden. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe einer geschützten Konfiguration.

Die folgende Datei App.config enthält die erforderlichen Verbindungswerte. Die Werte im Element <appSettings> sind die erforderlichen Werte, die Sie während des Einrichtungsvorgangs für das Mediendienste-Konto abgerufen haben.

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

Zum Abrufen von Verbindungswerten aus der Konfiguration können Sie die Klasse ConfigurationManager verwenden und die Werte dann Feldern in Ihrem Code zuweisen:

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

Sie sind nun bereit, mit dem nächsten Thema fortzufahren: Erfassen von Medienobjekten mit dem Media Services SDK für .NET.

Siehe auch


Erstellungsdatum:

2014-05-23

Community-Beiträge

Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft