Condividi tramite


Accesso a livello di codice

È possibile accedere ai dati di telemetria degli hub di notifica a livello di codice, analogamente alle metriche bus di servizio di Microsoft Azure (usando gli identificatori REST forniti nelle tabelle precedenti per accedere alle rispettive metriche).

Passaggio 1: Creare un certificato

Creare innanzitutto un certificato per accedere alle risorse della sottoscrizione di Azure. In Windows eseguire le operazioni seguenti:

  1. Aprire Visual Studio prompt dei comandi amministratore e digitare il comando seguente:

    makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
    
  2. Eseguire Certmgr.msc, fare clic su Personal sul lato sinistro, quindi fare clic con il pulsante destro del mouse sul certificato creato e scegliere Tutte le attività, quindi Esporta.

    Portal

  3. Seguire la procedura guidata e scegliere l'opzione per non esportare la chiave privata. Scegliere l'opzione per esportare un certificato CER e quindi specificare un nome file che termina con .cer.

    Portal

  4. Ripetere il processo di esportazione, questa volta scegliendo di esportare la chiave privata in un file PFX. Selezionare quindi un nome che termina con .PFX.

Passaggio 2: Upload il certificato in Azure

Caricare ora . File CER per abilitare il certificato per eseguire operazioni sulle risorse di Azure.

  1. Nel portale di gestione di Azure fare clic su Impostazioni a sinistra e quindi fare clic su Certificati di gestione.

  2. Fare clic Upload nella parte inferiore della schermata e quindi selezionare . File CER.

  3. Prendere nota dell'ID sottoscrizione che si vuole gestire.

    Nota

    L'ID sottoscrizione deve essere l'oggetto per la sottoscrizione che contiene l'hub di notifica.

    Portal

Passaggio 3: Accedere alle metriche tramite un'interfaccia REST

Per leggere i dati di telemetria, è necessario eseguire chiamate REST a un URL costruito in base alle regole specificate nelle metriche di bus di servizio di Microsoft Azure (usando i nomi delle metriche segnalati nella sezione precedente).

Il codice seguente è un esempio che recupera il numero di push riusciti aggregati in intervalli di 5 minuti dal 2013-08-06T21:30:00Z (ricordarsi di sostituire gli sottoscrizioni, il nome dello spazio dei nomi, il nome dell'hub di notifica e il percorso del certificato pfx con i valori).

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


    }
}