从列表中动态创建azure webjobs

时间:2017-08-07 10:57:07

标签: azure-webjobs

我是一个拥有webjobs的服务器,可以从本地站点获取一些数据。 本地网站的数量可以更改,我的问题是,有没有办法根据网站列表创建一个webjobs? 我必须补充一点,webjob应该是连续的。

1 个答案:

答案 0 :(得分:1)

根据您的描述,我建议您根据网络应用程序的名称编写代码来部署您的Web作业(您可以编写一个循环来使用Web应用程序部署webjob)。

在webjob函数中,您可以编写代码,根据当前Web应用程序的名称从sql db或azure storage中询问连接字符串。(您可以使用Environment.GetEnvironmentVariable(“WEBSITE_SITE_NAME”)获取当前的Web应用程序名称)

关于如何通过代码部署webjob,您可以参考以下代码。

注意:首先,您应该在Visual Studio中创建一个Web作业项目。然后你应该将bin的debug文件夹打包为zip文件。我们会将此zip文件上传到azure Web应用程序。

有关如何将zip文件上传到网络应用程序的步骤。

1.设置部署凭据。

enter image description here

2.使用部署凭据替换网站名称和用户名和密码。

    public static void WebApiSample()
    {
        string siteName = "yourwebsitename";
        String username = "username";
        String password = "password";
        String encoded = System.Convert.ToBase64String(
        System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri($"https://{siteName}.scm.azurewebsites.net/");
        client.DefaultRequestHeaders.Add("Authorization", $"Basic {encoded}");  
        deployJobAsync(client,$"myJob-2", @"path\Debug.zip").Wait();

    }

    private static async Task deployJobAsync(HttpClient client,string jobName, string zipFileName)
    {
        using (StreamReader reader = new StreamReader(zipFileName))
        {

            StreamContent streamContent = new StreamContent(reader.BaseStream);
            var response = await
            client.PutAsync($"api/zip/site/wwwroot/App_Data/jobs/continuous/{jobName}/",
            streamContent);
            var result = await response.Content.ReadAsStringAsync();
            if (response.StatusCode == HttpStatusCode.OK)
                return;
            else
                throw new Exception(result);
        }
    }

结果:

enter image description here