02 July 2014 Azure, HowTo, WebJobs Robert Muehsig

Das noch in Entwicklung befindliche Azure WebJob SDK bietet einige coole Features zum Verarbeiten und Bereitstellen von Daten. Bekanntes Beispiel ist das Sample welches auf eine Azure Queue lauscht und sobald ein Item da vorhanden ist anfängt dies zu verarbeiten.

Szenario: Zeitgesteuerte Aktivitäten – ohne Queue und co.

Mein Szenario war allerdings wesentlich trivialer: Ich wollte eigentlich nur eine Möglichkeit haben eine Methode zeitgesteuert aufzurufen und eine Datei in den Blobstorage abzulegen – ohne Cloud und co.

Zum Code:

   1: class Program
   2:     {
   3:         static void Main(string[] args)
   4:         {
   5:             JobHost host = new JobHost();
   6:             host.Call(typeof(Program).GetMethod("WriteFile"));
   7:         }
   8:  
   9:         [NoAutomaticTrigger]
  10:         public static void WriteFile([Blob("container/foobar.txt")]TextWriter writer)
  11:         {
  12:             writer.WriteLine("Hello World..." + DateTime.UtcNow.ToShortDateString() + " - " + DateTime.UtcNow.ToShortTimeString());
  13:         }
  14:     }

Wer die bekannten Beispiele anschaut wird feststellen dass die Methode “RunAndBlock” nicht aufgerufen wird. Dies ist auch gar nicht nötig da das Program nur von dem Scheduler aufgeweckt wird und die “write” Methode aufruft.

Damit der Code auch funktioniert muss man noch folgende Konfigurationen hinterlegen, danach kann man die gesamte Konsolenanwendung zippen und im Azure Portal hochladen und den Scheduler entsprechen konfigurieren. Konfiguration:

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <configuration>
   3:   <connectionStrings>
   4:     <add name="AzureJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=...;AccountKey=..."/>
   5:     <add name="AzureJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=...;AccountKey=..."/>
   6:   </connectionStrings>
   7:   <startup>
   8:     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   9:   </startup>
  10: </configuration>

Nach dem Upload:

Die “WebJobs” leben innerhalb einer Azure WebSite. Wer einen ständig laufenden WebJob benötigt sollte sicher gehen dass die Azure Website mit “AlwaysOn=True” läuft!

image

Es gibt auch ein kleines Administrationsportal für die WebJobs:

image

Auf Seiten des Storages werden einige Container angelegt – inklusive dem Container den ich in der Konsole benutze.

image

Und natürlich ist auch die Datei vorhanden:

image

Fazit

Die ersten Gehversuche sind ziemlich einfach und trotzdem scheint es recht ausgeklügelt zu sein. Gefällt schonmal.

Der (nicht allzu komplizierte) Code stammt unter anderem von einem Entwickler des WebJob Teams auf Stackoverflow. Der Code ist natürlich auch auf GitHub.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!