如何透過 Kudu API 執行 WebJob 並帶入參數

  • 125
  • 0

在之前的文章「透過 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 而又想要每次可以輸入需要的參數來讓程式使用的話,就可以透過這個小調整來達成這個需求了。

參考資料