8. 使用 Azure Function

使用ASP.NET Core创建Web API时,可以使用运行IIS的Windows服务器、运行Apache的Linux服务器,甚至是没有其他Web服务器前端的Kestrel服务器来托管它。可以使用Platform as a Service(PaaS)产品,例如,Azure App Service来托管Web API。使用Azure App Service时,需要根据CPU内核的数量、RAM的大小和存储大小为服务器实例付费。这些资源是为Web应用程序预留的(可以在一个App Service实例中运行多个Web应用程序)。

根据负载,还有一个托管Web API的选项;Consumption计划或App Service计划。对于App Service计划,可以在可能已经拥有的App Service中运行Azure Function。另一中变体即Consumption计划,也称为serverless或Function as a Service(Faas)。使用此选项,为运行Azure Function所需的请求数和内存付费。根据需要的资源,这个选项可能比使用App Service要便宜的多,但也可能更昂贵。还可以在App Service实例中运行Azure Function,该实例将其更改为与App Service相同的支付计划。

以无服务器方式使用Azure Function时,它后面仍然有一个服务器。Azure Function技术总是基于App Service。但是,以无服务器方式使用它时,不会控制这个服务器,也没有保留CPU和内存。这就是价格不同的原因。有关Microsoft Azute定价模型的更多信息,请参见 https://azure.microsoft.com/pricing/

使用FaaS托管Azure Function有一些限制。Azure Function最多可以运行10分钟。默认超时为5分钟,但可以延长到10分钟。如果Azure Function需要运行更长的时间,就应该在App Service计划中托管Azure Function。

Azure Function使用静态方法实现的。在多个调用之间共享静态状态。但是,当不需要Azure Function时,它就会卸载,当HTTP请求再次到达时,它会重新加载和实例化。第一个请求可能需要更长的时间来返回结果。像App Service中always on这样的选项是不可用于Consumption计划的。根据负载,可以使用Azure Function自动启动其他机器,这是Consumption计划的另一个特性。只需要确保在静态类成员中的调用之间不共享状态。可以使用外部存储特性(如Azure Storage或SQL数据库)进行状态共享。

1. 创建 Azure Function

如果使用通过DI使用的服务创建Web API,并且该服务是在.NET标准库中定义的,就可以轻松地在Azure Function中使用相同的服务。使用Visual Studio 2017+ 时,可以在Add New Project中选择Cloud类别,并选择Azure Function模板,来创建Azure Function项目。需要安装Visual Studio扩展"Azute Functions and Web Jobs Tools",以使用此选项。选择此选项后,可以看到如下图所示的第一个配置选项。

使用这些选项,可以选择在调用Function时触发器的类型。有许多不同的触发器可用。这些触发器的例子包括:把一些数据写入Azure Cosmos DB、激活一个WebHook、在Microsoft Graph上发生的事件、SMS到达、到达Event Hub的事件、发生在Blob Storage中的事件等。最常用的触发器出现在这个对话框中;这些是HTTP请求、Azure存储队列中的项和计时事件。对于存储队列,当消息到达队列时,Function就可以启动。有了计时器触发器,就可以指定时间间隔,或者在特定的时间启动Function,比如每个星期六或每个月的第一个星期一。Azure Function是在间隔时间运行所需后台功能的最好实践——例如,清理或分析数据的存储过程。这一章主要讨论Web API,这里将使用HTTP触发器——触发接收HTTP请求的触发器。

要选择的另一个选项是Azure Function的版本。在Azure Functions 1.0中创建了.NET Framework库。Azure Functions 2.0使用.NET Standard 2.0,这通常是最好的选择(现在已经是v3版本,使用.net core 3.1)。只需要注意什么触发器可用于所选的版本。在作者撰写本文时,WebHook还不能用于Azure Functions 2.0,但可以用于Azure Functions 1.0。

还需要一个带有Azure Function的存储账户。要在本地系统上创建和测试Azure Function,可以使用存储模拟器。在Azure Function中写入日志信息需要使用存储账户。

有了访问权限,就指定哪些函数应该可用。可以选择只从其他函数中调用可访问的函数,而不从公共函数调用。这里选择Anonymous作为从外部访问Azure Function的访问权限。

创建这个项目时,会创建一个引用了NuGet包Microsoft.NET.Sdk.Functions的项目。该项目包含源文件Function.cs,以及GET请求的简单Hello, name实现。下一节将对其进行更改,以便在GET、POST、PUT和DELETE请求上调用BookChaptersService。

2. 使用依赖注入容器

虽然BookChaptersServicer很容易通过默认的构造函数来实例化,但是对于许多其他服务来说,这是不可能的,比如在构造函数中需要BooksContext的DbBookChaptersService。这就是为什么添加DI容器Microsoft.Extensions.DependencyInjection NuGet包是有用的原因。

BookServiceFunction类(托管Azure Func

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值