Dostęp programowy

Dostęp do danych telemetrycznych centrów powiadomień można uzyskać programowo, analogicznie do metryk Microsoft Azure Service Bus (przy użyciu identyfikatorów REST podanych w poprzednich tabelach w celu uzyskania dostępu do odpowiednich metryk).

Krok 1. Tworzenie certyfikatu

Najpierw utwórz certyfikat, aby uzyskać dostęp do zasobów subskrypcji platformy Azure. W Windows wykonaj następujące czynności:

  1. Otwórz Visual Studio wiersza polecenia administratora i wpisz następujące polecenie:

    makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
    
  2. Uruchom polecenie Certmgr.msc, kliknij pozycję Osobiste po lewej stronie, a następnie kliknij prawym przyciskiem myszy utworzony certyfikat, a następnie kliknij pozycję Wszystkie zadania, a następnie pozycję Eksportuj.

    Portal

  3. Postępuj zgodnie z instrukcjami kreatora i wybierz opcję, aby nie eksportować klucza prywatnego. Wybierz opcję eksportu certyfikatu CER, a następnie podaj nazwę pliku kończącą się ciągiem .cer.

    Portal

  4. Powtórz proces eksportowania, tym razem wybierając opcję wyeksportowania klucza prywatnego w pliku PFX. Następnie wybierz nazwę kończącą się ciągiem .PFX.

Krok 2. Przekazywanie certyfikatu na platformę Azure

Teraz przekaż plik . Plik CER umożliwiający certyfikatowi wykonywanie operacji na zasobach platformy Azure.

  1. W portalu zarządzania platformy Azure kliknij pozycję Ustawienia po lewej stronie, a następnie kliknij pozycję Certyfikaty zarządzania.

  2. Kliknij pozycję Przekaż w dolnej części ekranu, a następnie wybierz pozycję . Plik CER.

  3. Zanotuj identyfikator subskrypcji, którym chcesz zarządzać.

    Uwaga

    Identyfikator subskrypcji musi być identyfikatorem subskrypcji, która zawiera centrum powiadomień.

    Portal

Krok 3. Uzyskiwanie dostępu do metryk za pośrednictwem interfejsu REST

Aby odczytywać dane telemetryczne, należy wydać wywołania REST do adresu URL utworzonego zgodnie z regułami określonymi w metrykach Microsoft Azure Service Bus (przy użyciu nazw metryk zgłoszonych w poprzedniej sekcji).

Poniższy kod to przykład, który pobiera liczbę pomyślnych wypchnięć zagregowanych w 5-minutowych interwałach od 2013-08-06T21:30:00Z (pamiętaj o zastąpieniu identyfikatorów subskrypcji, nazwy przestrzeni nazw, nazwy centrum powiadomień i ścieżki certyfikatu pfx wartościami).

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


    }
}