Akses Terprogram

Anda dapat mengakses data telemetri hub pemberitahuan secara terprogram, dianalogikan dengan metrik Microsoft Azure Service Bus (menggunakan pengidentifikasi REST yang disediakan dalam tabel sebelumnya untuk mengakses masing-masing metrik).

Langkah 1: Membuat sertifikat

Pertama, buat sertifikat untuk mengakses sumber daya langganan Azure Anda. Di Windows, lakukan hal berikut:

  1. Buka perintah administrator Visual Studio, dan ketik perintah berikut:

    makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
    
  2. Jalankan Certmgr.msc, klik Pribadi di sisi kiri, lalu klik kanan sertifikat yang Anda buat dan klik Semua Tugas, lalu Ekspor.

    Portal

  3. Ikuti wizard dan pilih opsi untuk tidak mengekspor kunci privat. Pilih opsi untuk mengekspor sertifikasi CER, lalu berikan nama file yang diakhir dengan .cer.

    Portal

  4. Ulangi proses ekspor, kali ini memilih untuk mengekspor kunci privat dalam file PFX. Kemudian pilih nama yang diakhir dengan .PFX.

Langkah 2: Unggah sertifikat ke Azure

Sekarang unggah . File CER untuk memungkinkan sertifikat Anda melakukan operasi pada sumber daya Azure Anda.

  1. Di portal manajemen Azure, klik Pengaturan di sebelah kiri, lalu klik Sertifikat Manajemen.

  2. Klik Unggah di bagian bawah layar, lalu pilih . File CER.

  3. Catat ID langganan yang ingin Anda kelola.

    Catatan

    ID langganan harus menjadi untuk langganan yang berisi hub pemberitahuan.

    Portal

Langkah 3: Mengakses metrik melalui antarmuka REST

Untuk membaca telemetri, Anda harus mengeluarkan panggilan REST ke URL yang dibuat sesuai dengan aturan yang ditentukan dalam metrik Microsoft Azure Service Bus (menggunakan nama metrik yang dilaporkan di bagian sebelumnya).

Kode berikut adalah sampel yang mengambil jumlah pendorongan yang berhasil dikumpulkan dalam interval 5 menit sejak 2013-08-06T21:30:00Z (ingatlah untuk mengganti subscriptionIds, nama namespace, nama hub pemberitahuan, dan jalur sertifikasi pfx dengan nilai Anda).

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


    }
}