2016-06-28 14 views
0

Ich habe eine DLL erstellt, die aus statischen Klasse bestehen.Ich habe sie in meinen Web-Jobs (webjob1, webjob2, etc ..) erstellt und in azurblau bereitgestellt.Call statische Methode mit Azure WebJobs

Jeder Web-Job kann gleichzeitig auf eine Methode zugreifen. Da wir eine statische Klasse verwenden, wird ein einzelner Speicher im Heap erstellt. Jeder Web-Job enthält den Referenzwert dieser statischen Klasse. Meine Frage ist, wird es irgendein Problem schaffen?

Nach meinem Verständnis funktioniert C# in einer synchronen Art und Weise. Somit wartet jeder Web-Job in einer Warteschlange auf die Funktionen der statischen Klasse. Jede Änderung, die für die Variablen dieser statischen Klasse vorgenommen wird, spiegelt sich in anderen Web-Aufträgen wieder. Da die statische Klasse über einen eigenständigen Speicher verfügt.

Wenn meine Annahme richtig ist, warum sollten wir eine solche statische Hilfsklasse statt einer normalen halten, die wir instanziieren und verwenden können.

Ich erstelle statische Klasse wie diese, um einige Details von meinem db zu bekommen.

public static class StaticHelper 
    { 
     public static string GetValue() 
     { 
      using(IDBContext _DbContext = new sampleDBContext()) 
      { 

      } 

      //Acessing values through this context 
     } 
    } 
+0

Wirklich hängt davon ab, was Sie versuchen zu erreichen. C# haben auch async/erwarten Muster. Es wird einfacher sein, wenn Sie Ihren Code hier veröffentlichen können. Prost. – Thomas

+0

@Thomas haben aktualisiert ... – Skull

+0

Webjobs warten nicht, auf Ihre statische Methode zuzugreifen. Sie werden es gleichzeitig nennen. – Thomas

Antwort

2

Wenn ich es richtig verstehe, haben Sie mehrere Webjobs, die die gleiche Abhängigkeit von einer DLL haben. Sie haben mehrere Instanzen dieser Website und verwenden das SDK, aber nicht den Warteschlangentrigger.

Jeder Web-Job wird als eigener Prozess ausgeführt und jede Instanz der Website kann andere Instanzen dieser Web-Jobs haben (abhängig davon, ob Sie eine einzelne Instanz oder mehrere Instanzen festgelegt haben).

"Jeder Web-Job kann gleichzeitig auf eine Methode zugreifen" - Ja, aber sie befinden sich in verschiedenen Prozessen, so dass Sie in diesem Fall sicher sind.

Wenn das Ihre Frage beantwortet, erfahren Sie mehr darüber, wie .net und mehrere Prozesse statische Logik handhaben (nicht wirklich webjobsspezifisch). Ich würde mit Jeffry Richter beginnen, um dieses Detail zu lernen.

+0

Ich brauche noch einige Klarstellungen von Ihrer Antwort ...Da Sie erwähnen, dass Web-Jobs als ein Prozess arbeiten, wird jeder Web-Job seinen eigenen Speicher erstellen und eine eigene statische Klassen-Instanz haben (bezieht sich auf den statischen Klassen-Speicher unter dem Prozess-Speicher (Web-Job-Speicher)). – Skull

+0

Mit Blick auf den Kudu-Code sieht es so aus, als ob der Webjob einen brandneuen cmd.exe-Prozess bekommt. Das Web-Job-Verzeichnis wird auf ProcessStartInfo gesetzt, umgebrochen und dann gestartet. Was mich zu der Annahme verleitet, dass zwischen der Website und den Webjobs keine gemeinsame Erinnerung besteht. ProcessWrapper.cs umschließt den zugrunde liegenden Prozess und wird in dieser Klasse gestartet: https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/ProcessWrapper.cs. Der Prozess wird in der Klassenmethode Executable.cs erstellt CreateProcess() https://github.com/projectkudu/kudu/blob/master/Kudu.Core/Infrastructure/Executable.cs –

+0

Vielen Dank ... Sie haben Recht Jeder Webjob läuft in verschiedenen Prozessen, so dass er threadsicher ist. – Skull