简单的webjob-处理来自web链接的响应,并以固定的时间间隔将其保存到blob中-不可能找到示例或解决方案



我正在寻找一个简单的网络作业示例:

任务将是处理来自web链接的响应,并以固定的时间间隔将其保存到blob

首先,就时间触发器而言,ms文档让我感到困惑:

https://learn.microsoft.com/en-us/azure/app-service/webjobs-create#ncrontab-表达式

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer?tabs=csharp#example

以及我应该如何构建WebJob,我应该使用azure WebJob模板(.net 4.x.x(还是.net核心控制台应用程序??

https://learn.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to

https://github.com/Azure/azure-webjobs-sdk-samples/tree/master/BasicSamples

https://learn.microsoft.com/en-us/azure/app-service/webjobs-sdk-get-started

https://learn.microsoft.com/en-us/azure/app-service/webjobs-create

所有这些资源,对于一个会得到web响应的定时任务来说,没有一个简单的例子,还有关于构建web作业VS的困惑,wth??我想在VS中构建一个c#应用程序,并通过azure devops将其部署到azure作为Web作业。

因为我不是.net开发人员,所以浪费了3天时间。。。

多年来,Webjobs发生了变化和发展,其中包括Azure Functions的贡献,它也是建立在Webjobs SDK之上的。我知道这会让人困惑,但简单的答案是,所有不同的方法仍然有效,但有些方法比其他方法更新。在两种定时器触发器样式中,第二种更为流行。

对于这样的东西,我通常建议使用函数而不是Webjobs,因为在这一点上,它会为您节省一些锅炉板代码,但这完全取决于您。正如我提到的,基础非常相似。您可以将功能应用程序部署到任何应用程序服务计划中,包括消费计划-这是特定于按使用付费的功能,而不是WebJobs所需的月费。

至于.NET Framework与.NET Core,您可以使用它将取决于您用于设置应用程序服务的运行时。如果你有选择,我建议你使用Core,因为这将是唯一向前发展的版本。如果你选择使用函数,你肯定会想要使用核心。

就控制台应用程序问题而言,所有WebJobs本质上都是控制台应用程序。从代码的角度来看,它们是实现Webjobs SDK的控制台应用程序。如果你愿意,你可以在Azure之外运行它们。功能应用程序不同。Function的主机实际上是在幕后运行的,您正在创建一个主机使用的类库。

Visual Studio与Visual Studio代码在很大程度上是个人偏好。我更喜欢VS for Webjobs,并根据我使用的语言使用VS和VS Code for Functions应用程序。

.NET Core中最基本的Webjob版本按照时间表从网页中提取数据并将其输出到blob存储中,其外观如下。Function应用程序一开始会使用完全相同的GetWebsiteData()方法加上[FunctionName("GetWebsiteData")],但您不需要Main方法,因为该部分由主机进程处理。

public class Program
{
static async Task Main(string[] args)
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
b.AddTimers();
});
builder.ConfigureAppConfiguration((context, configurationBuilder) =>
{
configurationBuilder
.AddJsonFile($"appsettings.json", optional: true);
});
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
public async static void GetWebsiteData(
[TimerTrigger("0 */1 * * * *")] TimerInfo timerInfo,
[Blob("data/websiteData", FileAccess.Write)] Stream outputBlob, 
ILogger logger)
{
using(var client = new HttpClient())
{
var url = "https://microsoft.com";
var result = await client.GetAsync(url);
//you may need to do some additional work here to get the output format you want
outputBlob = await result.Content.ReadAsStreamAsync();
}
}
}

最新更新