Share via


プログラムによるアクセス

通知ハブのテレメトリ データには、Microsoft Azure Service Bus メトリックに似たプログラムでアクセスできます (前の表で提供されている REST 識別子を使用して、それぞれのメトリックにアクセスします)。

手順 1: 証明書を作成する

まず、Azure サブスクリプション リソースにアクセスする証明書を作成します。 Windows で、次の操作を実行します。

  1. Visual Studio の管理者コマンド プロンプトを開き、次のコマンドを入力します。

    makecert -sky exchange -r -n "CN=<CertificateName>" -pe -a sha1 -len 2048 -ss My "<CertificateName>.cer"
    
  2. Certmgr.msc を実行し、左側にある [個人] をクリックし、作成した証明書を右クリックし、[すべてのタスク]、[エクスポート] の順にクリックします。

    Portal

  3. ウィザードの指示に従って操作し、プライベート キーをエクスポートしないオプションを選択します。 CER 証明書をエクスポートするオプションを選択し、拡張子が .cer のファイル名を付けます。

    Portal

  4. エクスポート プロセスを繰り返し、今回はプライベート キーを PFX ファイル形式でエクスポートします。 拡張子が .PFX のファイル名を付けます。

手順 2: 証明書を Azure にアップロードする

.CER ファイルをアップロードして、証明書で Azure リソースを操作できるようにします。

  1. Azure 管理ポータルの左側にある [設定] をクリックし、[管理証明書] をクリックします。

  2. 画面の下部にある [アップロード] をクリックし、.CER ファイルを選択します。

  3. 管理するサブスクリプション ID をメモしておきます。

    注意

    サブスクリプション ID は、通知ハブを含むサブスクリプションの ID にする必要があります。

    Portal

手順 3: REST インターフェイスを使用してメトリックにアクセスする

テレメトリを読み取るには、(前のセクションで報告したメトリック名を使用して) Microsoft Azure Service Busメトリックで指定された規則に従って構築された URL に対して REST 呼び出しを発行する必要があります。

次のコードは、2013-08-06T21:30:00Z 以降に 5 分間隔で集計したプッシュの成功件数を取得するサンプルです (サブスクリプション ID、名前空間名、通知ハブ名、pfx 証明書のパスは、実際の値に置き換えてください)。

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


    }
}