博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习Azure Functions:在Visual Studio 2017中创建Azure Functions
阅读量:3529 次
发布时间:2019-05-20

本文共 8783 字,大约阅读时间需要 29 分钟。

目录


随着无服务器Azure故事的最新情况,Azure Functions现在可以在Visual Studio中开发,就像任何其他功能一样。NET项目类型。这意味着我们可以在开发Azure Functions时使用Visual Studio熟悉且强大的功能和工作流程。在将功能代码发布到云之前,我们可以在本地编写,单元测试和调试功能代码。本文的目的是介绍Azure Functions的概念,即Azure支持的无服务器功能或预编译功能。

在这两篇学习Azure Functions的系列文章中,我们将学习如何在Visual Studio中开始使用Azure Functions,我们将获得Azure Functions的高级概述,并查看Visual Studio发展环境。我们将在我们的Function项目中创建一个新的Azure Function,我们将学习如何在本地开发机器上运行此函数,以及如何从Visual Studio中将它发布到Azure。一旦我们学会了如何创建基本函数,在下面的文章中,我们将学习如何创建与Azure存储功能不同的预编译函数,例如BlobQueues

Azure

AzureMicrosoft的云平台,可在云计算环境中提供大量资源。其中一个资源是虚拟机,即您选择的全功能机器,只需点击几下即可在几秒钟内创建您的配置和操作系统,您可以使用安全凭据从任何地方远程访问机器。做任何你想做的事情,例如,托管你的网站,开发应用程序,为你的软件创建生产或测试环境等。让我们一步一步地看到我们如何实现这一目标。

和无服务器计算

谈论定义:

“Azure FunctionsMicrosoft Azure公共云上托管的无服务器计算服务。Azure Functions和无服务器计算通常用于加速和简化应用程序开发。

关于Azure Functions的首要注意事项是它们在完全托管的环境中运行。基本上这意味着我们不必去创建或管理虚拟机。Microsoft提供并提供Azure Functions所基于的所有底层硬件。这样做的好处之一是它为我们提供了高可靠性,因为我们不必手动管理底层基础架构。另一个好处是我们不必担心将安全补丁应用到底层基础架构。微软将为我们解决这个问题。但是,我们有责任确保我们在Azure Functions之上构建的系统得到适当的保护和管理。这种完全托管环境的另一个好处是它可以自动扩展。Azure Functions平台将自动扩展我们的功能,以处理传入请求量的变化。如果我们在消费计划上执行Azure Functions,那么我们只会在执行功能时付费。Azure Functions的另一个好处是我们需要编写更少的样板代码,其中一个原因是我们的Azure Functions可以轻松地与一系列Azure服务集成。例如,将我们的功能与Azure Blob存储集成就像在C#代码上配置正确的属性一样简单。

帐户设置

如果没有付费Azure帐户,可以利用Azure的新帐户提供200美元信用额度的好处。这意味着如果您是Azure的新手,想要免费试用,您将获得200美元的积分,您可以用它来探索Azure。如果您是Azure新手并且没有帐户,请按照以下过程操作,否则直接登录您的帐户。

1、打开Azure网站,即

2、点击开始免费创建您的免费Azure帐户并获得200美元的积分。

创建一个帐户并申领200美元将需要您的信用卡/借记卡仅用于验证目的,并且不会从您的卡中扣除任何金额。您可以使用此信用额度和帐户30天。您将看到注册页面,您可以在其中填写所有信息并逐步注册。成功注册后,您将看到指向门户网站的链接,如下所示。

单击门户网站,您就可以登录仪表板,随时可以使用/试玩Azure

在开始编写Azure Functions之前,让我们确保相应地设置开发环境。我们将在这里使用Visual Studio 2017。您可以在本教程中使用任何版本的Visual Studio 2017。先决条件是在Visual Studio上启用Azure开发。您可以在Visual Studio安装中检查它,如下所示:

在本文中,我们将创建一个允许进行信用卡申请的功能。此函数将使用配置为仅允许POST请求的HTTP触发器。这个HTTP POST将包含信用卡申请详细信息的JSON。我们将通过Azure存储队列将信用卡应用程序从评分中分离出去。因此,一旦执行此HTTP函数,应用程序将返回到队列。然后我们将创建一个流程应用程序功能,该功能将此功能带入队列并确定信用卡应用程序是否成功。如果应用程序成功,那么我们将编写BlobAzure Blob存储。此blob将写入单独接受的blob容器,如果信用卡应用程序未成功,换句话说,它被拒绝,则应用程序将被写入不同的blob存储容器。然后,我们将创建一个接受的申请功能来处理接受的信用卡申请,我们还将创建一个拒绝的申请功能来处理被拒绝的申请。

Visual Studio 2017中创建Azure Functions

让我们按照一步一步的步骤创建一个Azure function项目并向其中添加Azure Functions。最后,我们将创建的Azure Functions发布到Azure门户。我们将创建一个接受信用卡应用程序并基于某些标准的模块,接受并拒绝该应用程序。

Azure Functions项目

1、打开Visual Studio并创建一个新项目。

2、从项目模板类型列表中选择Cloud ”,然后选择Azure Functions作为项目类型。为项目指定一个有意义的名称,然后单击OK

3、首先,选择Empty作为项目类型,然后单击OK以创建项目。

4、完成后,项目将如下图所示。我在创建项目时给项目命名为LearnAzureFunctions,并在Visual Studio解决方案中显示为项目。

HTTP触发的Azure Functions

现在我们的Azure Function项目已准备就绪,我们可以为此项目添加多个功能。让我们开始添加它们以实现我们的案例研究目标。

1、右键单击该项目并添加新的Azure Functions,如下图所示:

2、选择类型为Azure Function并为其指定一个有意义的名称,例如,在我们的案例中为ApplyForCC

3、选择类型Http trigger作为功​​能类型,在访问权限中,您可能会看到几个选项。现在,选择将访问权限限制为仅限Function 的选项,然后单击OK

4、完成后,我们将获得如下所示的功能。请注意,这是一个Http触发器函数,因此可以通过浏览器或API客户端像API一样执行。如果我们仔细观察它,它具有FunctionName包含函数名称的属性,并Task返回像Web API一样的Http响应。该Run方法是在该API被命中时执行的方法,它将授权级别作为参数。由于我们将访问权限设置为Function级别,因此它显示AuthorizationLevel.Function并具有HTTP动词,如GETPOST。该方法还将路由作为参数,请求和日志,即TraceWriter类实例来写日志,如log.Info(“C# HTTP trigger function processed a request.”)方法所示。

以下是生成的完整类代码。该方法处理请求并期望来自请求的name查询参数。如果它找到name查询参数,则返回OK响应,即,200否则返回Bad Request响应。

using System.Linq;using System.Net;using System.Net.Http;using System.Threading.Tasks;using Microsoft.Azure.WebJobs;using Microsoft.Azure.WebJobs.Extensions.Http;using Microsoft.Azure.WebJobs.Host;namespace LearnAzureFunctions{  public static class ApplyForCC  {    [FunctionName(ApplyForCC)]    public static async TaskHttpResponseMessage Run(      [HttpTrigger(AuthorizationLevel.Function,          get, post,          Route = null)]HttpRequestMessage req,      TraceWriter log)    {      log.Info(C# HTTP trigger function processed a request.);       parse query parameter      string name = req.GetQueryNameValuePairs()          .FirstOrDefault(q = string.Compare(q.Key, name, true) == 0)          .Value;      if (name == null)      {        Get request body        dynamic data = await req.Content.ReadAsAsyncobject();        name = data.name;      }      return name == null                 req.CreateResponse(HttpStatusCode.BadRequest,                 Please pass a name on the query string or in the request body)                 req.CreateResponse(HttpStatusCode.OK, Hello + name);    }  }}

5、让我们稍微修改一下方法只接受post请求,所以从参数列表中删除Get属性,如下所示:

6、现在,编译应用程序并通过单击箭头操作按钮运行它,如下所示,或者您也可以按F5运行该应用程序。

7、函数处于运行模式后,将启动func.exe控制台窗口。如果你仔细监视它,它会在详细信息中显示它找到了一个新函数LearnAzureFunctions.ApplyForCC.Run,并且在作业主机启动后,它显示了我们ApplyForCC函数的结束端点。我们可以通过Postman等任何Web API客户端的POST请求测试此端点。我们将在以下部分中执行此操作:

Postman测试和调试HTTP触发器功能

1、一旦应用程序启动并运行,我们就可以通过Postman测试我们的功能。如果您没有Postman应用程序,请安装它以测试API调用。安装应用程序后,从start explorer打开应用程序,如下所示。

2、从控制台窗口获取功能URL并发出POST请求,如下所示。请注意,我们收到404错误请求错误。如果你还记得它,那么从Run方法返回错误,因为没有提供名为name的参数。

3、让我们更正该请求并使用name参数发出请求。因此,请附加查询字符串name = “Akhil”并按send。请注意,我们得到200,即OK响应文本为Hello Akhil。所以我们的Azure Functions在本地工作。

4、现在,如果您检查控制台窗口,我们会看到请求和响应,其中显示执行ApplyForCC,当执行时,它会显示Executed并且响应也会发送。

5、您还可以通过将断点放在函数中并发出请求来调试方法。我们看到name参数设置为Akhil,如下所示:

我们的Http触发器工作正常。我们现在将介绍一个模型,即用于信用卡应用程序,它将作为我们的Azure Functions的输入,并相应地处理应用程序。

1、添加一个名为CCApplication的新类,并添加以下代码,即类及其属性。

namespace LearnAzureFunctions  {    public class CCApplication    {      public string Name { get; set; }      public int Age { get; set; }      public string Occupation { get; set; }      public float YearlyIncome { get; set; }    }  }

我们的解决方案完全如下图所示:

2、在Azure Functions中进行一些修改。从请求中读取信用卡应用程序模型,并在应用程序中记录该人员的姓名,然后发送回复消息,说明已收到该名称的信用卡请求。运行应用程序,以便在测试之前启动我们的控制台窗口。

以下是实现的代码:

using System.Linq;using System.Net;using System.Net.Http;using System.Threading.Tasks;using Microsoft.Azure.WebJobs;using Microsoft.Azure.WebJobs.Extensions.Http;using Microsoft.Azure.WebJobs.Host;namespace LearnAzureFunctions{  public static class ApplyForCC  {    [FunctionName("ApplyForCC")]    public static async Task
Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, TraceWriter log) { log.Info("C# HTTP trigger function processed a request."); CCApplication ccApplication = await req.Content.ReadAsAsync
(); log.Info($"Received Credit Card Application from : {ccApplication.Name }"); return req.CreateResponse(HttpStatusCode.OK, $"Application received and submitted for {ccApplication.Name}"); } }}

3、现在再次回到Postman测试这个功能。这次,该功能不期望查询参数,而是期望来自请求正文的模型。因此,在请求正文中定义JSON并像之前一样发送POST请求。

4、您可以将调试器放在方法中以检查接收到的请求的参数。正如我们在下图中看到的那样:

5、现在回到邮递员,我们得到了预期的响应,即模型中的名称已收到信用卡申请,即在我们的案例Akhil Mittal中。

Visual StudioAzure Functions发布到Azure门户

是时候在Azure门户中将Visual Studio中开发的本地函数作为Function应用程序发布。确保您在Azure中拥有一个帐户,并且您已登录到该帐户。

1、右键单击项目,您将在上下文菜单中选择Publish。单击该选项。

2、在下一个屏幕上,如果您是第一次发布它,请选择如下所示的单选按钮,如果您要发布现有应用程序,则可以选择选择现有单选按钮。选择发布目标为Azure Function App,然后单击发布

3、如果您已经在Visual Studio中登录到Microsoft帐户,那么它是好的,否则它将要求您在继续之前登录Microsoft帐户以访问Azure门户服务。下一步将要求您在发布函数之前提供App Service配置。

4、提供功能名称,订阅应自动填充,资源组(您可以创建新的或使用现有的)。选择一个主机方案,给它命名,例如CCAppFunctionPlan,位置为Central US,我选择的大小为Consumption,如下图所示。如果我们选择消费计划,请注意此警告,告诉我们消费应用服务计划仅适用于Function 应用程序,但这很好,因为我们正在创建一个Function 应用程序。这意味着我们只会在函数执行时收费。让我们点击OK,最后,我们可以在这里选择一个现有的存储帐户,或者我们可以创建一个新帐户。那么,我们来创建一个新的存储帐户。我们将此存储帐户称为ccappfunction,我们将此处的帐户类型保留为默认值。

5、现在,现在继续并点击Create,这将创建我们的App Service,它还将部署我们的Function 应用程序,包括我们的ApplyForCC功能到Azure

发布完成后,将创建发布配置文件,如下所示:

6、转到Azure门户,在仪表板上,我们看到我们的CCAppFunction应用服务已创建,并且ccappfunction存储帐户和CCAppFunctionPlan服务计划已成功创建。

7、双击CCAppFunction即可支持多种功能的App服务。在我们的例子中,到目前为止它只是在它所持有的功能上,即ApplyForCC。在CCAppFunction页面上,您将看到左侧的功能列表,当您展开它时,您将看到该ApplyForCC功能。单击该功能并查看该功能的详细信息。在概述页面上,即函数的详细信息页面,您可以看到其状态为正在运行以及该函数的URL。请记住我们在从本地测试函数时使用的端点,这是Azure现在公开的相同端点。

Azure Functions

如果我们点击Manage选项卡,我们可以在这里看到几个键。如果我们回到Visual Studio并检查我们的函数,请参阅我们设置的AuthorizationLevel Function。这意味着我们需要在将函数部署到Azure后调用该函数时提供功能键。如果我们回到门户网站,我们可以看到我们已经为我们自动添加了一个默认功能键,如果需要,我们可以添加其他功能键,我们可以看到键值。

1、现在,ApplyForCC再次单击功能选项卡,通过单击Get Function URL链接获取功能URL,如下所示。请注意,我们无法在此处更改函数定义,因为它处于只读模式。任何需要更改的内容都应该从Visual Studio本身完成,并且可以再次发布。

2、复制URL

3、返回Postman并使用门户网站中复制的Azure Functions URL 发出新POST请求。确保你的消息体具有我们之前给出的JSON

4、一旦发送请求,我们就会收到收到并提交给Akhil的申请的回复这表明我们在Azure上部署的功能实际上正在运行,我们正在获取响应。我们来检查一下。

5、返回门户网站,单击Monitor选项卡,我们看到成功计数显示为1。如果单击它,我们会看到我们的函数的日志,即称为调用日志,它显示函数的详细信息,如持续时间,状态,上次运行和执行的函数。

6、在如下所示的日志部分中,我们看到了我们在功能代码本身中执行的日志记录文本。

Visual Studio调试Azure Functions

我们将尝试从Visual Studio调试部署的Azure Functions

1、返回Visual Studio并打开Cloud Explorer,如下所示:

2、在列表中选择您对Azure的订阅,然后单击AppServices,我们看到我们的功能名称出现在那里,即部署在云上的功能。右键单击CCAppFunction,然后单击Attach Debugger

3、连接调试器后,将使用功能URL启动浏览器,如下所示:

4、回到Postman并再次使用功能应用程序的托管URL发出类似之前的请求。

5、一旦发送请求,我们就会在Visual Studio的函数中看到调试器断点,这意味着我们正在调试该函数。您可以检查请求和请求正文以获取参数。按F5继续。

6、在Postman中,我们看到收到的回复为200

在这篇详细的文章中,我们了解了什么是Azure Functions和功能应用程序,如何在Visual Studio中本地编写Azure Functions,调试和测试它并将功能发布到Azure门户。我们学习了如何使用Visual Studio测试部署的Azure Functions并对其进行调试。快乐的编码!

 

原文地址:

转载地址:http://zjzhj.baihongyu.com/

你可能感兴趣的文章
安装rabbitmq时踩的坑
查看>>
2021-06-09数据库添加多条数据
查看>>
简单的JAVA小作品
查看>>
一些方便的遍历方法
查看>>
CMake下载
查看>>
未调用fflush产生的图片文件无法打开问题
查看>>
SQL 约束(二)
查看>>
SQL ALTER用法(三)
查看>>
SQL where子句及查询条件语句(六)
查看>>
SQL 连接JOIN(九)
查看>>
linux VM虚拟机可以ping通主机,但主机无法ping通虚拟机
查看>>
linux 错误码
查看>>
C++ 中Struct与typedef struct总结
查看>>
WNetAddConnection2调用失败,错误码1200/1312
查看>>
POI读写Excel的基本使用
查看>>
淘宝网站的架构演进
查看>>
设置zookeeper开机自启动流程
查看>>
CentOS安装mysql5.7的教详细流程
查看>>
项目整合微信扫码登录功能
查看>>
分布式文件系统FastDfs的搭建
查看>>