Delen via


Toegang op programmeerniveau

U kunt via programmacode toegang krijgen tot telemetriegegevens van Notification Hubs, vergelijkbaar met Microsoft Azure Service Bus metrische gegevens (met behulp van de REST-id's in de voorgaande tabellen voor toegang tot de respectieve metrische gegevens).

Stap 1: Een certificaat maken

Maak eerst een certificaat voor toegang tot uw Azure-abonnementsbronnen. Ga in Windows als volgt te werk:

  1. Open Visual Studio opdrachtprompt van de beheerder en typ de volgende opdracht:

    makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
    
  2. Voer Certmgr.msc uit, klik aan de linkerkant op Personal , klik met de rechtermuisknop op het certificaat dat u hebt gemaakt en klik vervolgens op Alle taken en vervolgens exporteren.

    Portal

  3. Volg de wizard en kies de optie om de persoonlijke sleutel niet te exporteren. Kies de optie om een CER-certificaat te exporteren en geef vervolgens een bestandsnaam op die eindigt op .cer.

    Portal

  4. Herhaal het exportproces en kies deze keer dat u de persoonlijke sleutel in een PFX-bestand wilt exporteren. Selecteer vervolgens een naam die eindigt op .PFX.

Stap 2: het certificaat Upload naar Azure

Upload nu uw . CER-bestand om uw certificaat in staat te stellen bewerkingen uit te voeren op uw Azure-resources.

  1. Klik in azure-beheerportal op Instellingen aan de linkerkant en klik vervolgens op Beheercertificaten.

  2. Klik op Upload onder aan het scherm en selecteer vervolgens uw . CER-bestand.

  3. Noteer uw abonnements-id die u wilt beheren.

    Notitie

    De abonnements-id moet de id zijn voor het abonnement dat de Notification Hub bevat.

    Portal

Stap 3: Toegang krijgen tot metrische gegevens via een REST-interface

Als u telemetrie wilt lezen, moet u REST-aanroepen uitgeven aan een URL die is samengesteld volgens de regels die zijn opgegeven in Microsoft Azure Service Bus metrische gegevens (met behulp van de metrische namen die in de vorige sectie zijn gerapporteerd).

De volgende code is een voorbeeld waarmee het aantal geslaagde pushes wordt opgehaald dat is geaggregeerd in intervallen van 5 minuten sinds 2013-08-06T21:30:00Z (vergeet niet om de subscriptionIds, naamruimtenaam, naamruimtenaam, naamhubnaam en pfx-certificaatpad te vervangen door uw waarden).

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


    }
}