Programmgesteuerter Zugriff
Sie können programmgesteuert auf Telemetriedaten von Benachrichtigungshubs zugreifen, analog zu Microsoft Azure Service Bus Metriken (mithilfe der REST-Bezeichner, die in den vorherigen Tabellen bereitgestellt werden, um auf die jeweiligen Metriken zuzugreifen).
Schritt 1: Erstellen eines Zertifikats
Erstellen Sie zunächst ein Zertifikat, um auf Ihre Azure-Abonnementressourcen zuzugreifen. Führen Sie in Windows die folgenden Aktionen aus:
Öffnen Sie Visual Studio Administrator-Eingabeaufforderung, und geben Sie den folgenden Befehl ein:
makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
Führen Sie Certmgr.msc aus, klicken Sie auf der linken Seite auf "Persönlich ", klicken Sie dann mit der rechten Maustaste auf das von Ihnen erstellte Zertifikat, und klicken Sie dann auf "Alle Aufgaben", und klicken Sie dann auf "Exportieren".
Folgen Sie dem Assistenten, und wählen Sie die Option aus, um den privaten Schlüssel nicht zu exportieren. Wählen Sie die Option zum Exportieren eines CER-Zertifikats aus, und geben Sie dann einen Dateinamen an, der mit
.cer
.Wiederholen Sie den Exportvorgang, und wählen Sie dieses Mal aus, um den privaten Schlüssel in einer PFX-Datei zu exportieren. Wählen Sie dann einen Namen aus, der mit
.PFX
.
Schritt 2: Hochladen das Zertifikat in Azure
Laden Sie jetzt Ihre . CER-Datei zum Aktivieren Ihres Zertifikats zum Ausführen von Vorgängen in Ihren Azure-Ressourcen.
Klicken Sie im Azure-Verwaltungsportal auf Einstellungen links, und klicken Sie dann auf Verwaltungszertifikate.
Klicken Sie unten auf dem Bildschirm auf Hochladen, und wählen Sie dann Ihre . CER-Datei.
Beachten Sie Ihre Abonnement-ID, die Sie verwalten möchten.
Hinweis
Die Abonnement-ID muss für das Abonnement sein, das den Benachrichtigungshub enthält.
Schritt 3: Zugreifen auf Metriken über eine REST-Schnittstelle
Um Telemetrie zu lesen, müssen Sie REST-Aufrufe einer URL ausgeben, die gemäß den in Microsoft Azure Service Bus Metriken angegebenen Regeln erstellt wurde (mithilfe der im vorherigen Abschnitt gemeldeten Metriknamen).
Der folgende Code ist ein Beispiel, das die Anzahl der erfolgreichen Pushes abruft, die in 5-Minuten-Intervallen seit 2013-08-06T21:30:00Z aggregiert werden (denken Sie daran, die abonnementIds, den Namespacenamen, den Namen des Benachrichtigungshubs und den Pfx-Zertifikatpfad durch Ihre Werte zu ersetzen).
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Security.Cryptography.X509Certificates;
using System.ServiceModel.Syndication;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace telemetry1
{
class Program
{
[DataContract(Name = "properties", Namespace = "https://schemas.microsoft.com/ado/2007/08/dataservices")]
public class MetricValue
{
[DataMember(Name = "Timestamp")]
public DateTime Timestamp { get; set; }
[DataMember(Name = "Min")]
public long Min { get; set; }
[DataMember(Name = "Max")]
public long Max { get; set; }
[DataMember(Name = "Total")]
public long Total { get; set; }
[DataMember(Name = "Average")]
public float Average { get; set; }
}
static void Main(string[] args)
{
string uri = @"https://management.core.windows.net/{subscriptionId}/services/ServiceBus/namespaces/{namespaceName}/NotificationHubs/{hubName}/metrics/outgoing.allpns.success/rollups/PT5M/Values?$filter=Timestamp%20gt%20datetime'2014-08-06T21:30:00Z'";
HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(uri);
sendNotificationRequest.Method = "GET";
sendNotificationRequest.ContentType = "application/xml";
sendNotificationRequest.Headers.Add("x-ms-version", "2015-01");
X509Certificate2 certificate = new X509Certificate2(@"{pathToPfxCert}", "{certPassword}");
sendNotificationRequest.ClientCertificates.Add(certificate);
try
{
HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();
using (XmlReader reader = XmlReader.Create(response.GetResponseStream(), new XmlReaderSettings { CloseInput = true }))
{
SyndicationFeed feed = SyndicationFeed.Load<SyndicationFeed>(reader);
foreach (SyndicationItem item in feed.Items)
{
XmlSyndicationContent syndicationContent = item.Content as XmlSyndicationContent;
MetricValue value = syndicationContent.ReadContent<MetricValue>();
Console.WriteLine(value.Total);
}
}
}
catch (WebException exception)
{
string error = new StreamReader(exception.Response.GetResponseStream()).ReadToEnd();
Console.WriteLine(error);
}
}
}
}