在之前的文章「透過 Kudu API 實做 App Service WebJob 管理平台」裡透過 Kudu API 來觸發執行 WebJob ,但是在某些情境下會需要讀取參數,而且會是要每次執行的時候可以帶不一樣的參數,這樣的情境我們就不能把參數寫在 config 上,參考文件之後發現透過程式去觸發 WebJob 的時候我們可以在網址帶入參數,因此就調整了之前寫的管理平台讓它可以支援參數。
實做
調整 IKuduService 加上支援參數。
/// <summary>
/// Run WebJob
/// </summary>
/// <param name="name"></param>
/// <param name="type"></param>
/// <param name="arguments"></param>
/// <returns></returns>
string ExcuteWebJob(string type, string name, string arguments);
調整 KuduService 加上呼叫 Api 帶入 arguments 參數。
/// <summary>
/// Run WebJob
/// </summary>
/// <param name="name"></param>
/// <param name="type"></param>
/// <param name="arguments"></param>
/// <returns></returns>
public string ExcuteWebJob(string type, string name, string arguments)
{
var runtype = (type == "continuous") ? "start" : "run";
var request = new RestRequest($"api/{type}webjobs/{name}/{runtype}?arguments={arguments}", Method.Post);
SetBasicAuthorization(request);
var response = this.restClient.ExecuteAsync(request).Result;
return response.Content;
}
調整畫面加入可以執行帶參數的按鈕
會跳出畫面可以輸入要執行的參數再去執行。
而 WebJob 的程式也調整一下會把接收到的參數印出來確認
internal class Program
{
static void Main(string[] args)
{
foreach (var arg in args)
{
Console.WriteLine(arg);
}
}
}
調整好之後執行程式測試之後再去檢視 Log 就可以發現在執行 WebJob 時候會把我們輸入的參數帶入了,而程式也有接收到並且列印出來。
結論
在某些情境會需要手動執行 WebJob 而又想要每次可以輸入需要的參數來讓程式使用的話,就可以透過這個小調整來達成這個需求了。