65.9K
CodeProject 正在变化。 阅读更多。
Home

调试 Azure Functions

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2022年10月31日

CPOL

7分钟阅读

viewsIcon

17908

downloadIcon

62

为开发人员提供有关如何在本地或远程 Azure 中调试 Azure Functions 的概述。

目录

  1. 引言
    1. 目的
    2. 范围
  2. 必备组件
  3. 演示目标
  4. Azure Function 解释
  5. 创建您的 Azure Function 项目
  6. Azure Function 代码解释
    1. 附加项目
    2. 依赖注入 DBContext
  7. 函数调用结果
  8. 部署到 Azure
  9. 使用 Postman 在本地调试
  10. 使用 Postman 测试 Azure
  11. 使用 Postman 调试 Azure
  12. 在 Azure 中测试(包括生产环境)
  13. 杂项
    1. 演示(Visual Studio 2022)代码
    2. Postman 项目

1.引言

本文档为希望快速掌握 Microsoft 客户端 Blazor WebAssembly (WASM) 技术的开发人员提供了概述。

下载源代码

1.1. 目的

为开发人员提供一份路线图,以便在开发客户端 Blazor (WASM) 项目时快速上手。涵盖相关主题,例如在本地调试客户端和服务器代码、部署到本地 IIS 和远程 Azure 服务器、演示依赖注入、共享 C# 类、CORS、日志记录、AD 安全、本地化、SignalR、Entity Framework 和 API (CRUD) 调用。

1.2. 范围

本文档的范围是传达在现代软件环境中设计和部署客户端 Blazor (WASM) 应用程序所需的架构和技术。

2. 先决条件

3. 演示目标

在此演示中,我们将

  • 在 Visual Studio 中创建一个 Http 触发器 Azure Function 项目
  • 它将查询我们的(Azure)数据库并返回结果列表
  • 本地调试
  • 部署到 Azure
  • 针对 Azure 进行测试 – Postman
  • 针对 Azure 进行调试 – Visual Studio

4. Azure Function 解释

Azure Function 是一个执行单个任务的单一端点,因此它遵循 SOLID 原则中的“S”。Http 触发器更多用于 B2B(来自其他应用程序的 Web Hooks)。一旦它完成任务,它会将结果传递给下一个 Azure Function,直到整个过程完成并将最终结果返回给调用者。

您可以使用 Azure Function 设计微服务架构,通过一组函数,每个函数执行一个任务,但共同执行一个过程。这使您能够只扩展微服务的一部分。

Azure Functions 基于触发器,这意味着在 Azure Function 执行之前必须发生一个事件(例如,数据库条目、API 调用或文件插入到 Azure Blob 存储中)。Visual Studio 默认提供了 Azure Function 触发器,但它也有一个备用的空触发器,您可以根据需要进行自定义。所以,您可以说 Azure Functions 遵循事件/可观察设计模式。

Azure Functions 遵循无服务器架构模式,但由于它们是 API,它们将遵循 REST 架构风格。但由于它们是无服务器的,它们可以按需运行,无需将其托管在服务器上并管理基础设施。如果您已经有 Azure 计划,它们是免费的。在我将要演示的 Azure Function 示例中,我基本上使用了微服务按服务划分数据库模式,因为我的服务处理自己的数据库(纯属巧合 😊)。

5. 创建您的 Azure Function 项目

在 Visual Studio 中,创建一个新项目(文件新建项目

从可用项目模板中选择 Azure Functions 并输入项目名称

Graphical user interface, text, application

Description automatically generated

选择 Http 触发器应用程序模板,保持存储帐户和授权级别的默认值

Graphical user interface, application

Description automatically generated

这将创建默认的 Azure Function 项目(我将默认的 Function 类重命名为 LatestAlbums.cs

Text, application

Description automatically generated

关于身份验证级别的一个注意事项(在本地调试时不需要 API 密钥)。此 API 密钥附加到 URL 或其正文中

函数 需要一个函数特定的 API 密钥。
当未明确设置级别时,这是默认值。
匿名 任何人都可以调用该函数
Admin 您需要主密钥才能运行此函数

https://myhttptriggerfnx.azurewebsites.net/api/ FuncMusicStore?code=2h8UpMZhExR32wBFZIWLmI7mpM67mAlpPIZIx0CzKHmuAzFued3ZZg==

6. Azure Function 代码解释

默认的 HTTP 动词是 GetPost(红色框),您可以根据需要删除或替换它们。如果是 Get 请求,您可以像往常一样从 URL 获取数据(蓝色框),或者如果您在请求体中发布数据,您可以使用 StreamReader 检索数据(橙色框)。在粉色框中,我正在对 SQL Server 数据库进行 dbContext 调用,并将数据以 json 格式返回给客户端。

Graphical user interface, text, application, email

Description automatically generated

6.1. 附加项目

我修改了解决方案的结构,以包含多个项目,一个项目用于保存 DBContext 相关对象,另一个是模型项目。这些项目已分离,以便代码可以在多个 Azure Functions 之间共享。

Graphical user interface, application

Description automatically generated with medium confidence

6.2. 依赖注入 DBContext

为了包含依赖注入和 Entity Framework,需要对默认代码进行一些调整。

将您的连接字符串添加到 Azure Function 项目中的 local.settings.json 文件。

Graphical user interface, application, Word

Description automatically generated

向您的项目添加一个 Startup.cs 文件,在这里我们将添加依赖项,检索连接字符串并构建 Entity Framework DBContext

Graphical user interface, text, application, email

Description automatically generated

dbContext 注入您的 Azure Function 的构造函数(您需要添加构造函数),并像往常一样分配给您的 private 类属性。

Graphical user interface, text, application

Description automatically generated

7. 函数调用结果

如果您在本地(在 Visual Studio 中)运行项目,您将在控制台窗口中看到要用于您的环境的 URL。

Text

Description automatically generated

将 title 参数附加到 URL

https://:7071/api/LatestAlbums?title=Disc%201

这将返回以下结果

Text, letter

Description automatically generated

8. 部署到 Azure

注意:您需要有一个(免费)Azure 帐户(订阅)才能完成此部分。

右键单击 Azure Function,选择发布,单击 Azure,然后单击下一步

Graphical user interface, text, application

Description automatically generated

选择适合您订阅的 Azure 服务

Graphical user interface, text, application, email

Description automatically generated

注意:如果您的 Azure 订阅详细信息未显示 – 请检查您是否已登录 Azure。

注意:如果函数应用部分为空,您需要先创建一个 Azure Function 资源,然后刷新函数应用部分。

Graphical user interface, text, application, email

Description automatically generated

然后您将看到 Visual Studio 中的发布屏幕,确保您以调试模式作为配置设置进行调试,然后单击发布(这将部署我们稍后将用于调试的 pdb 文件)。

Graphical user interface, application

Description automatically generated

您将在构建窗口中看到部署状态。

Text

Description automatically generated

如果您导航到 Azure 中的 Functions 资源,您应该会看到新部署的 Azure Function

Graphical user interface, text, application, email

Description automatically generated

要找出您的 Azure 函数的 API 密钥是什么(它将用于保护您的客户端 API 调用)。单击该函数,几秒钟后,获取函数 URL 将变为启用状态,单击它以获取调用该函数所需的完整 URL。

Graphical user interface, text, application

Description automatically generated

https://func-version1-demo.azurewebsites.net/api/LatestAlbums?code=MLlNpmvdOodDkE6xZ5P9o6t6H1OA8onLMKYB0ZvggUfWAzFuVyJJaw==

9. 使用 Postman 在本地调试

以调试模式运行 Azure Function 项目,在您的代码中设置断点。然后打开 Postman 并粘贴带有 title 参数的 localhost URL,然后单击发送

Graphical user interface, application

Description automatically generated

您的断点将正常命中

Graphical user interface, text, application, email

Description automatically generated

返回 JSON 数据列表

A picture containing graphical user interface

Description automatically generated

您还可以将 title 参数放入 URL 的正文中,它将被 Azure Function 拾取。

Graphical user interface, text, application, emailDescription automatically generated

10. 使用 Postman 测试 Azure

Graphical user interface, text, application, email

Description automatically generated

11. 使用 Postman 调试 Azure

回到发布屏幕,点击托管椭圆,选择附加调试器,因为您已经以调试模式部署了解决方案。

Graphical user interface, text, application

Description automatically generated

这次在 Postman 中输入您从 Azure 获取的 URL 和 API 代码,将参数放入正文。

Graphical user interface, text, application, email

Description automatically generated

在 Visual Studio 代码中设置一个断点,然后单击 Postman 中的发送

Graphical user interface, application

Description automatically generated

12. 在 Azure 中测试(包括生产环境)

您可以在 Azure 内部对您的(生产)Azure Function 进行冒烟测试。导航到您的函数并选择代码 + 测试选项。然后,在右侧填写适当的详细信息并运行 API – 它将在单独的选项卡中显示结果。

Graphical user interface, text, application

Description automatically generated

Graphical user interface, text, application, email

Description automatically generated

14. 修订历史

日期 版本 描述 作者
2022 年 5 月 26 日 1.0 初稿 Bert O’Neill
© . All rights reserved.