2016-08-14 5 views
0

Ich muss einen Offline-Job-Prozessor erstellen, der eine ausführbare Konsole mit einer Reihe unterschiedlicher Befehlszeilen-Flags basierend auf einer Warteschlange aufruft. Ich habe ein neues Projekt mit der Vorlage "Azure WebJobs SDK: Warteschlangen" in Visual Studio erstellt. Ich weiß, dass ich dies in Azure bereitstellen kann, und es wird eine virtuelle Maschine erstellen und alles zum Laufen bringen.Wie kann ich eine Binärdatei in einem Azure-Webjob "aussortieren"?

Ich habe bereits eine Web- "Worker-Rolle" im Wesentlichen die gleiche Art von Sache, aber, in diesem Fall habe ich den Code, den er ruft, und haben die Quelle zu einer Bibliothek meinen Code benötigt. Dieses Mal muss ich eine "vordefinierte" Binärdatei aufrufen, die jemand anderes geschrieben hat und auf die ich keinen Zugriff auf die Quelle habe.

Ich kann einen Unterordner im Projekt erstellen und die ausführbare Datei (und alle ihre Ordner und Bibliotheken) in diesem Ordner ablegen, aber ich würde nicht wissen, wie ich es von meinem Webjob aus aufrufen soll. Wie wäre die Pfadstruktur zu der Binärdatei, die einmal in Azure im Cloud-Service bereitgestellt wurde, wenn sie sich nur in einem Unterordner des Projekts befindet?

Auch erwartet diese Binärdatei wirklich in C: \ Software \ <Directory>. Ist es möglich, dieses bestimmte externe Verzeichnis anzugeben, das auf der virtuellen Maschine erstellt wird, wenn diese Anwendung in einem Cloud-Dienst in Azure bereitgestellt wird? Wenn ich das könnte, würde es besser funktionieren, und ich würde genau wissen, wie man die ausführbare Datei aufruft.

Antwort

0

Als Teil der Worker-Rolle können Sie einen Unterordner erstellen und Ihre Binärdatei darin einfügen. (Sie können einen Ordner in Visual Studio nicht ziehen und ablegen, wenn dies geschieht. In meinem Fall musste ich also mehrere Unterordner erstellen und Dateien dort ablegen, damit meine Anwendung funktioniert.)

Bei der Bereitstellung kopiert die Worker-Rolle diesen Ordner mit beliebigen Dateien auf den Worker-Server in Azure, wo er dann aufgerufen werden kann. Nach der Bereitstellung befindet sich dieser beliebige Ordner unter ...TASACDWS\TASACDWS\TASACDWS\csx\Debug\roles\TASACDWS_Worker\approot

Der Ordner "root" oder "base" der Worker-Rolle selbst ist das aktuelle Verzeichnis des Prozesses. Also, wenn meine Anwendung lebt in einem Ordner namens „Arbitrary_Binary“ unter dem Arbeiter Rolle (in Visual Studio), kann ich es mit einem Prozess-Objekt verweisen, wie so:

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.CreateNoWindow = true; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.WorkingDirectory = "Arbitrary_Binary"; 
p.StartInfo.FileName = "Arbitrary_Binary\\Arbitrary_Binary.exe"; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
p.WaitForExit(); 
0

Sie können relative Pfade verwenden, um Ihre Subdatei ausfindig zu machen. Das aktuelle Verzeichnis befindet sich immer dort, wo Ihre Haupt-WebJob-Exe ausgeführt wird. So können Sie einfach die Satellitendateien in Unterordnern finden.

Sie werden jedoch nicht in der Lage sein, Ihre exe in c:\software\directory zu platzieren. Sie müssen sicherstellen, dass die exe, die Sie spawnen müssen, aus einem beliebigen Ordner laufen kann.

+0

leid, Sie pirschen, ich versuche zu Webjobs verstehen. Ich habe diese http://stackoverflow.com/questions/39063574/webjob-query-being-limited-by-take-not-processing-any-further-data-when-triggere gefragt, wenn es eine Chance gibt, die Sie etwas abwerfen können Licht. Vielen Dank –

Verwandte Themen