Verwenden von SignalR-Leistungsindikatoren in einer Azure-Webrolle

Von Luke Latham

Warnung

Diese Dokumentation ist nicht für die neueste Version von SignalR vorgesehen. Sehen Sie sich ASP.NET Core SignalR an.

SignalR-Leistungsindikatoren werden verwendet, um die Leistung Ihrer App in einer Azure-Webrolle zu überwachen. Die Indikatoren werden von Microsoft Azure-Diagnose erfasst. Sie installieren SignalR-Leistungsindikatoren in Azure mit signalr.exe, demselben Tool, das auch für eigenständige oder lokale Apps verwendet wird. Da Azure-Rollen vorübergehend sind, konfigurieren Sie eine App, um SignalR-Leistungsindikatoren beim Start zu installieren und zu registrieren.

Voraussetzungen

Erstellen einer Azure-Webrollenanwendung, die SignalR-Leistungsindikatoren verfügbar macht

  1. Öffnen Sie Visual Studio.

  2. Klicken Sie in Visual Studio auf Datei>Neu>Projekt.

  3. Wählen Sie im Dialogfeld Neues Projekt links die Kategorie Visual C#>Cloud und dann die Vorlage Azure Cloud Service aus. Nennen Sie die App SignalRPerfCounters, und wählen Sie OK aus.

    Neue Cloudanwendung

    Hinweis

    Wenn die Kategorie "Cloudvorlage " oder die Vorlage "Azure Cloud Service " nicht angezeigt wird, müssen Sie die Azure-Entwicklungsworkload für Visual Studio 2017 installieren. Wählen Sie unten links im Dialogfeld Neues Projekt den Link Visual Studio-Installer öffnen aus, um Visual Studio-Installer zu öffnen. Wählen Sie die Workload Azure-Entwicklung und dann Ändern aus, um mit der Installation der Workload zu beginnen.

    Azure-Entwicklungsworkload in Visual Studio-Installer

  4. Wählen Sie im Dialogfeld Neuer Microsoft Azure-Clouddienstdie Option ASP.NET Webrolle aus, und wählen Sie die > Schaltfläche aus, um die Rolle dem Projekt hinzuzufügen. Klicken Sie auf OK.

    Hinzufügen ASP.NET Webrolle

  5. Wählen Sie im Dialogfeld Neue ASP.NET Webanwendung – WebRole1 die MVC-Vorlage und dann OK aus.

    Hinzufügen von MVC und Web-API

  6. Öffnen Sie in Projektmappen-Explorer die Datei Diagnose.wadcfgx unter WebRole1.

    Projektmappen-Explorer Diagnose.wadcfgx

  7. Ersetzen Sie den Inhalt der Datei durch die folgende Konfiguration, und speichern Sie die Datei:

    <?xml version="1.0" encoding="utf-8"?>
    <DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
      <PublicConfig>
        <WadCfg>
          <DiagnosticMonitorConfiguration overallQuotaInMB="4096">
            <DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error" />
            <Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Error" />
            <Directories scheduledTransferPeriod="PT1M">
              <IISLogs containerName ="wad-iis-logfiles" />
              <FailedRequestLogs containerName ="wad-failedrequestlogs" />
            </Directories>
            <WindowsEventLog scheduledTransferPeriod="PT1M">
              <DataSource name="Application!*[System[(Level=1 or Level=2 or Level=3)]]" />
              <DataSource name="Windows Azure!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]" />
            </WindowsEventLog>
            <CrashDumps containerName="wad-crashdumps" dumpType="Mini">
              <CrashDumpConfiguration processName="WaIISHost.exe" />
              <CrashDumpConfiguration processName="WaWorkerHost.exe" />
              <CrashDumpConfiguration processName="w3wp.exe" />
            </CrashDumps>
            <PerformanceCounters scheduledTransferPeriod="PT1M">
              <PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\% Time in GC" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Exceptions(w3wp)\# of Exceps Thrown / sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\# of current logical Threads" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\# of current physical Threads" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\Current Queue Length" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR LocksAndThreads(w3wp)\Contention Rate / sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\# Bytes in all Heaps" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\# GC Handles" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\.NET CLR Memory(w3wp)\# of Pinned Objects" sampleRate="PT10S" />
    
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Connected" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Reconnected" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Disconnected" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connections Current" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Received Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Sent Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Received/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Connection Messages Sent/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Received Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Received/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Message Bus Messages Received/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Published Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Messages Published/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Subscribers Current" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Subscribers Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Subscribers/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Allocated Workers" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Busy Workers" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Message Bus Topics Current" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: All Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: All/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Resolution Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Resolution/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Invocation Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Hub Invocation/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Tranport Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Errors: Transport/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Streams Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Streams Open" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Streams Buffering" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Errors Total" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Errors/Sec" sampleRate="PT10S" />
              <PerformanceCounterConfiguration counterSpecifier="\SignalR(*)\Scaleout Send Queue Length" sampleRate="PT10S" />
            </PerformanceCounters>
          </DiagnosticMonitorConfiguration>
        </WadCfg>
        <StorageAccount></StorageAccount>
      </PublicConfig>
      <PrivateConfig>
        <StorageAccount name="" key="" endpoint="" />
      </PrivateConfig>
      <IsEnabled>true</IsEnabled>
    </DiagnosticsConfiguration>
    
  8. Öffnen Sie die Paket-Manager-Konsole unter Tools>NuGet-Paket-Manager. Geben Sie die folgenden Befehle ein, um die neueste Version von SignalR und das SignalR-Hilfsprogrammpaket zu installieren:

    install-package microsoft.aspnet.signalr
    install-package microsoft.aspnet.signalr.utils
    
  9. Konfigurieren Sie die App so, dass die SignalR-Leistungsindikatoren in der Rolle instance installiert werden, wenn sie gestartet oder wiederverwendet wird. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt WebRole1, und wählen SieNeuen Ordnerhinzufügen> aus. Nennen Sie den neuen Ordner Startup.

    Hinzufügen des Startordners

  10. Kopieren Sie die signalr.exe-Datei (hinzugefügt mit dem Paket Microsoft.AspNet.SignalR.Utils ) aus dem <Projektordner>/SignalRPerfCounters/packages/Microsoft.AspNet.SignalR.Utils.<Version>/Tools für den Ordner "Start" , den Sie im vorherigen Schritt erstellt haben.

  11. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Start, und wählen SieVorhandenes Elementhinzufügen> aus. Wählen Sie im angezeigten Dialogfeld signalr.exe und dann Hinzufügen aus.

    Hinzufügen von signalr.exe zum Projekt

  12. Klicken Sie mit der rechten Maustaste auf den ordner Startup , den Sie erstellt haben. Klicken Sie dann auf Hinzufügen>Neues Element. Wählen Sie den Knoten Allgemein , wählen Sie Textdatei aus, und nennen Sie das neue Element SignalRPerfCounterInstall.cmd. Mit dieser Befehlsdatei werden die SignalR-Leistungsindikatoren in der Webrolle installiert.

    Erstellen einer Batchdatei für die Installation des SignalR-Leistungsindikators

  13. Wenn Visual Studio die Datei SignalRPerfCounterInstall.cmd erstellt, wird sie automatisch im fenster Standard geöffnet. Ersetzen Sie den Inhalt der Datei durch das folgende Skript, und speichern und schließen Sie die Datei. Dieses Skript führt signalr.exeaus, wodurch der Rolle instance die SignalR-Leistungsindikatoren hinzugefügt werden.

    SET SignalR_LogDir=%~dp0Log\
    MKDIR "%SignalR_LogDir%"
    cd %~dp0
    signalr.exe ipc >> "%SignalR_LogDir%SignalR_Log.txt" 2>&1
    net localgroup "Performance Monitor Users" "Network Service" /ADD >> "%SignalR_LogDir%NetworkAdd.txt" 2>&1
    
  14. Wählen Sie die signalr.exe-Datei in Projektmappen-Explorer aus. Legen Sie in den Eigenschaften der Datei In Ausgabeverzeichnis kopieren auf Immer kopieren fest.

    Legen Sie Copy to Output Directory (Kopieren auf Ausgabeverzeichnis) auf Always (Immer kopieren) fest.

  15. Wiederholen Sie den vorherigen Schritt für die Datei SignalRPerfCounterInstall.cmd .

  16. Klicken Sie mit der rechten Maustaste auf die Datei SignalRPerfCounterInstall.cmd , und wählen Sie Öffnen mit aus. Wählen Sie im angezeigten Dialogfeld Binär-Editor und dann OK aus.

    Öffnen mit binärem Editor

  17. Wählen Sie im binären Editor alle führenden Bytes in der Datei aus, und löschen Sie sie. Speichern und schließen Sie die Datei.

    Führende Bytes löschen

  18. Öffnen Sie ServiceDefinition.csdef , und fügen Sie eine Startaufgabe hinzu, die die Datei SignalrPerfCounterInstall.cmd ausführt, wenn der Dienst gestartet wird:

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceDefinition name="SignalRPerfCounters" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
      <WebRole name="WebRole1" vmsize="Small">
        <Startup>
          <Task commandLine="Startup\SignalRPerfCounterInstall.cmd" executionContext="elevated" taskType="background" />
        </Startup>
        <Sites>
          <Site name="Web">
            <Bindings>
              <Binding name="Endpoint1" endpointName="Endpoint1" />
            </Bindings>
          </Site>
        </Sites>
        <Endpoints>
          <InputEndpoint name="Endpoint1" protocol="http" port="80" />
        </Endpoints>
      </WebRole>
    </ServiceDefinition>
    
  19. Öffnen Sie Views/Shared/_Layout.cshtml das jQuery-Paketskript, und entfernen Sie es am Ende der Datei.

    <div class="container body-content">
        @RenderBody()
        <hr />
        <footer>
            <p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
        </footer>
    </div>
    
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
    </body>
    </html>
    
  20. Fügen Sie einen JavaScript-Client hinzu, der die increment -Methode kontinuierlich auf dem Server aufruft. Öffnen Sie Views/Home/Index.cshtml , und ersetzen Sie den Inhalt durch den folgenden Code:

    @{
        ViewBag.Title = "Home Page";
    }
    
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
    <script src="~/signalr/hubs" type="text/javascript"></script>
    
    <div id="body">
        <section class="featured">
            <div class="content-wrapper">
                <p>
                    Hello World!
                </p>
                <div style="font-size:large;">
                    My Counter: <span id="counter"></span>
                </div>
            </div>
        </section>
        <section class="content-wrapper main-content clear-fix"></section>
    </div>
    
    <script type="text/javascript">
      $(document).ready(function () {
        var hub = $.connection.myHub;
    
        hub.client.sendResult = function (x) {
          console.log('sendResult(' + x + ')');
          $("#counter").text(x);
          window.setTimeout(function () {
            hub.server.increment(x);
          }, 1000);
        };
    
        $.connection.hub.connected = function () {};
        $.connection.hub.disconnected = function () {};
    
        $.connection.hub.stateChanged(function (change) {
          console.log('new State' + change.newState);
          if (change.newState === $.signalR.connectionState.disconnected) {
            $.connection.hub.start();
          }
          if (change.newState === $.signalR.connectionState.reconnecting) {
            console.log('Re-connecting');
          } else if (change.newState === $.signalR.connectionState.connected) {
            console.log('The server is online');
          }
        });
    
        $.connection.hub.error(function (error) {
          console.log('error ' + error);
        });
        
        $.connection.hub.logging = true;
        
        $.connection.hub.reconnected(function () {
          console.log('Reconnected');
          hub.server.increment(0);
        });
    
        $.connection.hub.start().done(function () {
          console.log('hub started');
          hub.server.increment(0);
        });
      });
    </script>
    
  21. Erstellen Sie im WebRole1-Projekt einen neuen Ordner mit dem Namen Hubs. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Hubs, und wählen SieNeues Elementhinzufügen> aus. Wählen Sie im Dialogfeld Neues Element hinzufügen die Kategorie Web>SignalR und dann die Elementvorlage SignalR Hub Class (v2) aus. Nennen Sie den neuen Hub MyHub.cs , und wählen Sie Hinzufügen aus.

    Hinzufügen der SignalR Hub-Klasse zum Ordner

  22. MyHub.cs wird automatisch im fenster Standard geöffnet. Ersetzen Sie den Inhalt durch den folgenden Code, und speichern und schließen Sie die Datei:

    using System.Threading.Tasks;
    using Microsoft.AspNet.SignalR;
    
    namespace WebRole1.Hubs
    {
        public class MyHub : Hub
        {
            public async Task Increment(int x)
            {
                await this.Clients.Caller.sendResult(x + 1);
            }
        }
    }
    
  23. Crank.exe ist ein Tool zum Testen der Verbindungsdichte, das mit der SignalR-Codebasis bereitgestellt wird. Da Crank eine permanente Verbindung erfordert, fügen Sie Ihrer Website eine hinzu, um sie beim Testen zu verwenden. Fügen Sie dem WebRole1-Projekt einen neuen Ordner namens PersistentConnections hinzu. Klicken Sie mit der rechten Maustaste auf diesen Ordner, und wählen Sie Klasse hinzufügen> aus. Nennen Sie die neue Klassendatei MyPersistentConnections.cs , und wählen Sie Hinzufügen aus.

  24. Visual Studio öffnet die Datei MyPersistentConnections.cs im fenster Standard. Ersetzen Sie den Inhalt durch den folgenden Code, und speichern und schließen Sie die Datei:

    using System.Threading.Tasks;
    using Microsoft.AspNet.SignalR;
    using Microsoft.AspNet.SignalR.Infrastructure;
    
    namespace WebRole1.PersistentConnections
    {
        public class MyPersistentConnection : PersistentConnection
        {
            protected override Task OnReceived(IRequest request, string connectionId, string data)
            {
                //Return data to calling user
                return Connection.Send(connectionId, data);        
            }
        }
    }
    
  25. Mithilfe der Startup -Klasse beginnen die SignalR-Objekte, wenn OWIN gestartet wird. Öffnen oder erstellen Sie Startup.cs , und ersetzen Sie den Inhalt durch den folgenden Code:

    using Microsoft.Owin;
    using Owin;
    using WebRole1.PersistentConnections;
    
    // Marks this class for automatic OWIN startup
    [assembly: OwinStartup(typeof(WebRole1.Startup))]
    namespace WebRole1
    {
        public partial class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                ConfigureAuth(app);
                // Only needed if "No Authentication" was not selected for the project
                app.MapSignalR();
                app.MapSignalR<MyPersistentConnection>("/echo");
            }
        }
    }
    

    Im obigen Code markiert das OwinStartup Attribut diese Klasse, um OWIN zu starten. Die Configuration -Methode startet SignalR.

  26. Testen Sie Ihre Anwendung im Microsoft Azure-Emulator, indem Sie F5 drücken.

    Hinweis

    Wenn bei MapSignalR eine FileLoadException auftritt, ändern Sie die Bindungsumleitungen in web.config wie folgt:

    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.0.0" />
    </dependentAssembly>
    
  27. Warten Sie etwa eine Minute. Öffnen Sie das Fenster des Cloud Explorer-Tools in Visual Studio (CloudExploreranzeigen>), und erweitern Sie den Pfad .(Local)/Storage Accounts/(Development)/Tables Doppelklicken Sie auf WADPerformanceCountersTable. SignalR-Indikatoren sollten in den Tabellendaten angezeigt werden. Wenn die Tabelle nicht angezeigt wird, müssen Sie möglicherweise Ihre Azure Storage-Anmeldeinformationen erneut eingeben. Möglicherweise müssen Sie die Schaltfläche Aktualisieren auswählen, um die Tabelle in Cloud Explorer anzuzeigen, oder die Schaltfläche Aktualisieren im geöffneten Tabellenfenster auswählen, um Daten in der Tabelle anzuzeigen.

    Auswählen der WAD-Leistungsindikatorentabelle in Visual Studio Cloud Explorer

    Anzeigen der in der WAD-Leistungsindikatorentabelle gesammelten Leistungsindikatoren

  28. Aktualisieren Sie zum Testen Ihrer Anwendung in der Cloud die Datei ServiceConfiguration.Cloud.cscfg , und legen Sie auf eine gültige Verbindungszeichenfolge für das Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString Azure Storage-Konto fest.

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceConfiguration serviceName="SignalRPerfCounters" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
      <Role name="WebRole1">
        <Instances count="1" />
        <ConfigurationSettings>
          <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="DefaultEndpointsProtocol=https;AccountName=&lt;account-name&gt;;AccountKey=&lt;account-key&gt;" />
        </ConfigurationSettings>
      </Role>
    </ServiceConfiguration>
    
  29. Stellen Sie die Anwendung in Ihrem Azure-Abonnement bereit. Ausführliche Informationen zum Bereitstellen einer Anwendung in Azure finden Sie unter Erstellen und Bereitstellen eines Clouddiensts.

  30. Warten Sie ein paar Minuten. Suchen Sie in Cloud Explorer nach dem speicherkonto, das Sie oben konfiguriert haben, und suchen Sie die WADPerformanceCountersTable Tabelle darin. SignalR-Indikatoren sollten in den Tabellendaten angezeigt werden. Wenn die Tabelle nicht angezeigt wird, müssen Sie möglicherweise Ihre Azure Storage-Anmeldeinformationen erneut eingeben. Möglicherweise müssen Sie die Schaltfläche Aktualisieren auswählen, um die Tabelle in Cloud Explorer anzuzeigen, oder die Schaltfläche Aktualisieren im geöffneten Tabellenfenster auswählen, um Daten in der Tabelle anzuzeigen.

Ein besonderer Dank gilt Martin Richard für die originalen Inhalte, die in diesem Tutorial verwendet werden.