2016-08-14 25 views
0

我需要創建一個脫機作業處理器,它將根據隊列調用帶有不同命令行標誌集的控制檯可執行文件。我在Visual Studio中使用「Azure WebJobs SDK:隊列」模板創建了一個新項目。我知道我可以將其部署到Azure,它會創建一個虛擬機並將其全部設置爲可用。如何在Azure webjob中「掏出」二進制文件?

我已經有一個網絡「工作人員角色」做基本上相同的事情,但是,在那種情況下,我寫了它調用的代碼,並且有我的代碼需要的庫的源代碼。這一次,我需要調用其他人編寫的「canned」二進制文件,並且我無法訪問源代碼。

我可以在項目中創建一個子文件夾,並將可執行文件(及其所有文件夾和庫)轉儲到此文件夾中,但我不知道如何從我的webjob調用它。如果它只是坐在項目的子文件夾中,那麼一旦部署到Azure中的雲服務,二進制文件的路徑結構會是什麼?

此外,這個二進制文件真的希望生活在C:\ Software \ <目錄>。將此應用程序部署到Azure中的雲服務時,是否可以指定要在虛擬機上創建的特定外部目錄?如果我能做到這一點,它會更好,我會知道如何調用可執行文件。

回答

0

作爲工作者角色的一部分,您可以創建一個子文件夾,並將其放入二進制文件中。 (這樣做時,您不能在Visual Studio中拖放文件夾,因此,在我的情況下,我必須創建幾個子文件夾並將文件放入它們中,以使我的應用程序可以正常工作。)

enter image description here

部署時,worker角色會將任意文件的該文件夾複製到Azure中的工作服務器,然後可以在其中調用該文件。部署時,此任意文件夾將位於...TASACDWS\TASACDWS\TASACDWS\csx\Debug\roles\TASACDWS_Worker\approot

輔助角色本身的「根」或「基本」文件夾是進程的當前目錄。所以,如果我的應用程序住了一個名爲「Arbitrary_Binary」下的工作者角色(在Visual Studio)文件夾中,我可以用Process對象引用它,像這樣:

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

您可以使用相對路徑來查找您的子可執行文件。當前目錄始終位於您的主WebJob exe文件的運行目錄中,因此可以輕鬆地在子文件夾中查找衛星文件。

但是,您將而不是能夠將您的exe放在c:\software\directory。您需要確保您需要產生的exe可以從任意文件夾運行。

+0

對不起秸稈你,我想理解webjobs。我已經問過這個http://stackoverflow.com/questions/39063574/webjob-query-being-limited-by-take-not-processing-any-further-data-when-triggere如果有什麼機會可以捨棄一些光。謝謝 –