Acesso Programático

Pode aceder a centros de notificação de dados de telemetria programática, análogos às métricas Microsoft Azure Service Bus (utilizando os identificadores REST fornecidos nas tabelas anteriores para aceder às respetivas métricas).

Passo 1: Criar um certificado

Em primeiro lugar, crie um certificado para aceder aos seus recursos de subscrição Azure. Em Windows, faça o seguinte:

  1. Abra Visual Studio pedido de comando do administrador e digite o seguinte comando:

    makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
    
  2. Executar Certmgr.msc, clicar em Personal no lado esquerdo, depois clicar no certificado que criou e clicar em Todas as Tarefas e, em seguida, Exportar.

    Portal

  3. Siga o assistente e escolha a opção de não exportar a chave privada. Escolha a opção de exportar um certificado CER e, em seguida, forneça um nome de arquivo que termine com .cer.

    Portal

  4. Repita o processo de exportação, desta vez optando por exportar a chave privada num ficheiro PFX. Em seguida, selecione um nome que termine com .PFX.

Passo 2: Faça o upload do certificado para Azure

Agora faça o upload do seu. Arquivo CER para permitir que o seu certificado execute operações nos seus recursos Azure.

  1. No portal de gestão Azure, clique em Definições à esquerda e, em seguida, clique em Certificados de Gestão.

  2. Clique em Upload na parte inferior do ecrã e, em seguida, selecione o seu . Arquivo CER.

  3. Tome nota do seu ID de subscrição que pretende gerir.

    Nota

    O ID de subscrição deve ser o para a subscrição que contém o centro de notificação.

    Portal

Passo 3: Métricas de acesso através de interface REST

Para ler telemetria, deve emitir chamadas REST para um URL construído de acordo com as regras especificadas nas métricas Microsoft Azure Service Bus (utilizando os nomes métricos relatados na secção anterior).

O seguinte código é uma amostra que recupera o número de impulsos bem sucedidos agregados em intervalos de 5 minutos desde 2013-08-06T21:30:00Z (lembre-se de substituir os subscriçõesIds, nome namespace, nome do centro de notificação e pfx cert path pelos seus valores).

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


    }
}