none
WebRole.cs wird in der Cloud nicht ausgeführt

    Frage

  • Hallo an alle,

    ich habe in meinem Projekt eine eingebundene WebRole.cs, in dieser ich die OnStart-Methode überschreibe, um eigene Logik zu implementieren.

    Unter anderem werden in einem Background-Thread zyklisch Daten zur Datenbank gesendet.

    Im Azure Emulator auf meinem Entwicklungsrechner kann man jeden Zyklus beobachten, alles Läuft wie man es sich wünscht!

    Wenn ich jedoch mein Projekt in die Azure Cloud deploye, habe ich das Gefühl, dass meine angepasste WebRole.cs nicht mehr ausgeführt wird.

    Es werden keine Daten mehr zur Datenbank gesendet - Nichts.

    Das verwirrt mich schon sehr, zumal es in meiner Entwicklungsumgebung perfekt läuft.

    Ich hoffe sehr, dass jemand einen Hinweis für mich hat!

    Euch allen noch einen schönen Tag,

    Daniel

    Dienstag, 12. Juni 2012 12:10

Alle Antworten

  • Hallo Daniel,

    hast Du ein Fehlerlogging eingebaut, um zu sehen, ob Exceptions auftreten?

    Die Datenbank, ist das eine SQL Azure Datenbank? Wenn ja, hast Du in den Firewall Regeln eingestellt, das von Windows Azure Verbindungen zu der DB aufgebaut werden dürfen?


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 12. Juni 2012 12:39
  • Hallo Olaf,

    vielen Dank für deine schnelle Antwort.

    Ich habe Fehlerloggings eingebaut und per IntelliTrace bekomme ich keine Fehler angezeigt. Ich bekomme auch leider keine Exceptions angezeigt im IntelliTrace.

    Ja, es ist eine SQLAzure Datenbank.

    Bezüglich der Firewall Regeln habe ich bei dieser Datenbank folgendes:

    MicrosoftServices: Anfang (0.0.0.0) - Ende (0.0.0.0)

    Und einmal eine temporäre damit wir vom Home-Office aus entwickeln können: von: 1.1.1.1 - 255.255.255.255

    Oder habe ich vor Urzeiten eine Regel gekillt?

    Viele Grüße

    Daniel

    Dienstag, 12. Juni 2012 12:46
  • MicrosoftServices: Anfang (0.0.0.0) - Ende (0.0.0.0)

    Hallo Daniel,

    wenn man das Häkchen zum zulassen von Windows Services setzt, wird diese Regel hinzugefügt; von daher sollte es zumindest aus der Sicht funktionieren.

    Wenn in den Fehler Logs nichts erscheint, ist es schwer zu sagen, woran es liegt.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 12. Juni 2012 16:35
  • Hallo Daniel,

    das fällt mir jetzt erst auf, Du hast WebRole geschrieben, ist das auch so in Windows Azure konfiguriert?

    Eine WebRole ist nur Web Sites/Services gedacht, die im IIS gehostet werden; in der Rolle läuft nichts permant als Dienst, sondern eben wie bei Web Sites alles auf Request.

    Um es als permanten Dienst laufen lassen zu können, musst Du es als WorkerRole laufen lassen.


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing

    Dienstag, 12. Juni 2012 16:57
  • Hallo Daniel,

    um nachvollziehen zu können, was Du genau machst wäre ein Einblick in deinen Code und deiner Service Configuration ganz nützlich. Unabhängig davon hat Olaf Recht, eine WebRole ist eigentlich nicht für Logik und Background-Threads gedacht, die gehören in eine WorkerRole.

    Schöne Grüße

    Oliver

    Mittwoch, 13. Juni 2012 07:38
    Moderator
  • Guten Morgen an alle,

    ich habe heute morgen noch etwas geforscht, leider ohne Erfolg.

    @Olaf

    Ja, genau der Haken ist gesetzt bei den AzureDatenbanken.

    Habe folgenden Link gefunden, dort macht augenscheinlich jemand genau dasselbe, was ich auch machen möchte: http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/how-to-combine-worker-and-web-role-in.html

    Das klappt leider auch nicht in der Cloud, zumal es für mich dasselbe ist, was ich seit gestern versuche.

    Ich habe gerade auch eine WorkerRole implementiert, das klappt leider auch nicht, lokal nach wie vor ohne Probleme und perfekt.

    WebRole und WorkerRole habe ich aber nicht parallel laufen gehabt, sondern immer nur allein.

    Hier ein Auszug aus der WorkerRole, die eigentlich identisch zu der WebRole ist:

    public override void Run()
            {
               Debug.WriteLine("WarmUp Start");
    
                while (true)
                {
                    try
                    {
                        
                            Debug.WriteLine("DB Aufruf Start");
    
                            Entities db = new Entities(ConfigurationManager.ConnectionStrings["Entities"].ToString());
                            Debug.WriteLine(string.Format("DB angepingt am {0}", DateTime.Now, db.sp_protocol("XXX")));
    
                            Trace.TraceInformation("End DB Action");
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine(ex.Message.ToString());
                        }
                        Thread.Sleep(10000);
                    }
               
            }

    Hier noch aus Auszug aus der ServiceConfiguration

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceConfiguration serviceName="My.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
      <Role name="My.Web">
        <Instances count="1" />
        <ConfigurationSettings>
          <Setting name="StorageConnectionString" value="" />
          <!--local Storage-->
          <!--<Setting name="StorageConnectionString" value="UseDevelopmentStorage=true" />-->
        </ConfigurationSettings>
      </Role>
      <Role name="My.Worker">
        <Instances count="1" />
        <ConfigurationSettings>
        </ConfigurationSettings>
      </Role>
    </ServiceConfiguration>

    Und hier die ServiceDefinition:

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceDefinition name="My.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
      <WebRole name="My.Web" vmsize="ExtraSmall">
        <Startup>
          <Task commandLine="StartUp\StartUp.cmd" executionContext="elevated" />
        </Startup>
        <Sites>
          <Site name="Web">
            <Bindings>
              <Binding name="Endpoint1" endpointName="Endpoint1" />
            </Bindings>
          </Site>
        </Sites>
        <Endpoints>
          <InputEndpoint name="Endpoint1" protocol="http" port="80" />
        </Endpoints>
        <Imports>
        </Imports>
        <ConfigurationSettings>
          <Setting name="StorageConnectionString" />
        </ConfigurationSettings>
        <LocalResources>
        </LocalResources>
      </WebRole>
      <WorkerRole name="My.Worker" vmsize="ExtraSmall">
        <Imports>
        </Imports>
      </WorkerRole>
    </ServiceDefinition>

    StartUpCmd:

    @echo off
    @echo Installing “IPv4 Address and Domain Restrictions” feature
    %windir%\System32\ServerManagerCmd.exe -install Web-IP-Security
    @echo Unlocking configuration for “IPv4 Address and Domain Restrictions” feature
    %windir%\system32\inetsrv\AppCmd.exe unlock config -section:system.webServer/security/ipSecurity

    Ich hoffe sehr, dass ihr noch eine Idee habt.

    Viele Grüße

    Daniel

    Mittwoch, 13. Juni 2012 09:38