我是一个拥有webjobs的服务器,可以从本地站点获取一些数据。 本地网站的数量可以更改,我的问题是,有没有办法根据网站列表创建一个webjobs? 我必须补充一点,webjob应该是连续的。
答案 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.设置部署凭据。
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);
}
}
结果: