您当前的位置: 首页 >  visual studio

寒冰屋

暂无认证

  • 1浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

学习Azure Functions:在Visual Studio 2017中创建Azure Functions

寒冰屋 发布时间:2019-04-11 21:06:05 ,浏览量:1

目录

介绍

Azure

Azure帐户设置

设置开发环境

案例分析

在Visual Studio 2017中创建Azure Functions

添加Azure Functions项目

添加HTTP触发的Azure Functions

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

介绍模型

从Visual Studio将Azure Functions发布到Azure门户

测试无服务器Azure Functions

从Visual Studio调试Azure Functions

结论

  • 下载PDF文章 - 2.6 MB
  • 下载源代码 - 429.7 KB
介绍

随着无服务器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存储功能不同的预编译函数,例如Blob和Queues。

Azure

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

Azure Functions和无服务器计算

从这里谈论定义:

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

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

Azure帐户设置

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

1、打开Azure网站,即azure.microsoft.com。

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函数,应用程序将返回到队列。然后我们将创建一个流程应用程序功能,该功能将此功能带入队列并确定信用卡应用程序是否成功。如果应用程序成功,那么我们将编写Blob到Azure 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动词,如GET和POST。该方法还将路由作为参数,请求和日志,即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 Studio将Azure 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并对其进行调试。快乐的编码!

 

原文地址:https://www.codeproject.com/Articles/1359783/Learning-Azure-Functions-Creating-Azure-Functions

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0442s