[小菜一碟] 如何傳遞參數給 Azure App Service 的 WebJob?

Azure App Service 中有一個 WebJob 功能,它可以讓我們上傳執行檔或指令碼,然後利用 App Service 的資源來長時間或排程執行,不需要另外開一台 VM,我們原本就已經有開發好的應用程式,改都不用改,直接打包成 zip 檔上傳就能執行,相當方便,但是我們要怎麼傳遞參數給我們在 WebJob 的應用程式?

我這邊的範例是將原先已寫好的 *.exe 及相關的 *.dll、設定檔,打包成 zip 檔上傳到 WebJob,那麼我們可以藉由下面這兩種方式將參數傳遞給執行檔。

WEBHOOK

WebJob 建立之後會自動產生一個 Webhook Url,我們使用 HTTP POST 加上 Basic Authentication 就可以驅動 WebJob 執行,Webhook Url 及 Basic Authentication 所需要的帳號密碼可以在 WebJob 的屬性頁面中找到。

我們在 Webhook Url 後面加上 ?arugments={參數(用空白隔開)} 就可以將參數傳遞給 WebJob。

BAT

使用 WEBHOOK 傳遞參數必須要發 HTTP POST 去驅動,如果我的 WebJob 是排程定期執行的,那該怎麼辦? WebJob 啟動時會去挑第一個可執行檔來執行,如果 Job 底下的檔案之中有多種類型的可執行檔,它會按照以下的順序來挑選:*.cmd、*.bat、*.exe、*.ps1、*.sh、*.php、*.py、*.js、*.jar,也就是說相同檔名的 .bat 及 .exe,WebJob 會選擇執行 .bat。

我們利用 WebJob 的這個特性,加入一個 run.bat 一起打包上傳,而 run.bat 的內容就是帶有參數的執行指令。

之後,我們透過 WebJob 的記錄頁面,就可以看到的確是 run.bat 被執行。

參考資料

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學