你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:创建 C# Durable Functions 应用
使用 Durable Functions(Azure Functions 的一项功能)在无服务器环境中编写有状态函数。 Durable Functions 管理应用程序中的状态、检查点和重启。
对于 .NET 类库函数,和 Azure Functions 类似,Durable Functions 支持两种进程模型。 若要详细了解这两种进程,请参阅进程内和独立工作进程 .NET Azure Functions 之间的差异。
本快速入门介绍了如何使用 Visual Studio Code 在本地创建和测试“hello world”Durable Functions 应用。 此函数应用可协调对其他函数的调用并将其链接在一起。 接下来,在 Azure 中发布函数代码。 使用的工具可通过 Visual Studio Code Azure Functions 扩展获得。
先决条件
若要完成本快速入门,你需要:
已安装 Visual Studio Code。
已安装以下 Visual Studio Code 扩展:
已安装 Azure Functions Core Tools 的最新版本。
Azure 订阅。 若要使用 Durable Functions,必须具有 Azure 存储帐户。
已安装 .NET Core SDK 版本 3.1 或更高版本。
一个可以保证数据安全的 HTTP 测试工具。 有关详细信息,请参阅 HTTP 测试工具。
如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
创建 Azure Functions 项目
在 Visual Studio Code 中,创建本地 Azure Functions 项目。
在“视图”菜单上选择“命令面板”(或选择 Ctrl+Shift+P)。
在提示符 (
>
) 处输入命令,然后选择“Azure Functions: 创建新项目”。选择浏览。 在“选择文件夹”对话框中,转到要用于项目的文件夹,然后选择“选择”。
在提示符处,选择或输入以下值:
提示 操作 说明 选择函数应用项目的语言 选择“C#”。 创建本地 C# Functions 项目。 选择版本 选择“Azure Functions v4”。 只有在尚未安装 Core Tools 的情况下,才会出现此选项。 首次运行应用时,即已安装 Core Tools。 选择 .NET 运行时 选择“.NET 8.0 独立”。 创建一个支持在独立工作进程和 Azure Functions 运行时 4.0 中运行的 .NET 8 的 Functions 项目。 有关详细信息,请参阅如何指向 Azure Functions 运行时版本。 为项目的第一个函数选择模板 选择“Durable Functions 业务流程”。 创建 Durable Functions 业务流程 选择持久存储类型 选择“Azure 存储”。 Durable Functions 的默认存储提供程序 有关详细信息,请参阅 Durable Functions 存储提供程序。 提供函数名称 输入 HelloOrchestration。 业务流程函数的名称。 提供命名空间 输入 Company.Function。 所生成类的命名空间。 选择打开项目的方式 选择“在当前窗口中打开”。 在所选的文件夹中打开 Visual Studio Code。
如果需要创建项目,Visual Studio Code 会安装 Azure Functions Core Tools。 它还会在某个文件夹中创建一个函数应用项目。 此项目包含 host.json 和 local.settings.json 配置文件。
另一个文件 (HelloOrchestration.cs) 包含 Durable Functions 应用的基本构建基块:
方法 | 说明 |
---|---|
HelloOrchestration |
定义 Durable Functions 应用业务流程。 在此示例中,业务流程启动,创建一个列表,然后将三个函数调用的结果添加到列表中。 当三个函数调用完成后,它返回该列表。 |
SayHello |
返回“hello”的简单函数应用。 此函数包含编排的业务逻辑。 |
HelloOrchestration_HttpStart |
HTTP 触发的函数,用于启动业务流程的实例并返回检查状态响应。 |
有关这些函数的详细信息,请参阅 Durable Functions 类型和功能。
配置存储
可以使用 Azurite(一个适用于 Azure 存储的模拟器)在本地测试该函数。 在 local.settings.json 中,将 AzureWebJobsStorage
的值设置为 UseDevelopmentStorage=true
,如以下示例所示:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
}
要在 Visual Studio Code 中安装并开始运行 Azurite 扩展,请在命令面板中输入“Azurite: Start”并选择 Enter。
可以对 Durable Functions 应用使用其他存储选项。 有关存储选项及其优势的详细信息,请参阅 Durable Functions 存储提供程序。
在本地测试函数
使用 Azure Functions Core Tools,可以在本地开发计算机上运行 Azure Functions 项目。 当你首次在 Visual Studio Code 中启动某个函数时,系统会提示你安装这些工具。
在 Visual Studio Code 中,在
SayHello
活动函数代码中设置断点,然后选择 F5 以启动函数应用项目。 “终端”面板会显示 Core Tools 的输出。在终端面板中,复制 HTTP 触发的函数的 URL 终结点。
使用 HTTP 测试工具向 URL 终结点发送 HTTP POST 请求。
响应是 HTTP 函数的初始结果。 它让你知道 Durable Functions 应用业务流程已成功启动。 它尚未显示业务流程的最终结果。 响应中包括了几个有用的 URL。
此时,应当会命中活动函数中的断点,因为业务流程已启动。 逐步执行该操作以获取业务流程状态的响应。
复制
statusQueryGetUri
的 URL 值,将其粘贴到浏览器的地址栏中,然后执行请求。 或者也可以继续使用 HTTP 测试工具发出 GET 请求。请求将查询业务流程实例的状态。 应该会看到实例已完成,并且它包含 Durable Functions 应用的输出或结果,如以下示例所示:
{ "name":"HelloCities", "instanceId":"7f99f9474a6641438e5c7169b7ecb3f2", "runtimeStatus":"Completed", "input":null, "customStatus":null, "output":"Hello, Tokyo! Hello, London! Hello, Seattle!", "createdTime":"2023-01-31T18:48:49Z", "lastUpdatedTime":"2023-01-31T18:48:56Z" }
提示
了解如何通过断点观察 Durable Functions 应用的重播行为。
若要停止调试,请在 Visual Studio Code 中选择 Shift+F5。
确认该函数可以在本地计算机上正确运行以后,即可将项目发布到 Azure。
登录 Azure
必须先登录到 Azure,然后才能创建 Azure 资源或发布应用。
如果你尚未登录,请在活动栏中选择 Azure 图标。 然后在“资源”下,选择“登录到 Azure”。
如果你已登录并可以看到你的现有订阅,请转到下一部分。 如果你没有 Azure 帐户,请选择“创建 Azure 帐户”。 学生可以选择“创建面向学生的 Azure 帐户”。
在浏览器中出现提示时,请选择你的 Azure 帐户,并使用你的 Azure 帐户凭据登录。 如果创建新帐户,你可以在创建帐户后登录。
成功登录后,可以关闭新的浏览器窗口。 属于你的 Azure 帐户的订阅显示在边栏中。
在 Azure 中创建函数应用
在本部分中,你将在 Azure 订阅中创建函数应用和相关的资源。 许多资源创建决策都是根据默认行为为你做出的。 要更好地控制已创建的资源,必须改为使用高级选项创建函数应用。
在 Visual Studio Code 中选择 F1 键,打开命令面板。 在提示符 (
>
) 处,输入并选择“Azure Functions: 在 Azure 中创建函数应用”。根据提示提供以下信息:
Prompt 操作 选择订阅 选择要使用的 Azure 订阅。 如果“资源”下只有一个订阅可见,则不会出现提示符。 输入函数应用的全局唯一名称 输入在 URL 路径中有效的名称。 系统将对你输入的名称进行验证,以确保其在 Azure Functions 中是唯一的。 选择一个运行时堆栈 选择当前本地运行的语言版本。 选择新资源的位置 选择 Azure 区域。 为了获得更好的性能,请选择你附近的区域。 在“Azure: 活动日志”面板中,Azure 扩展将显示在 Azure 中创建的各个资源的状态。
创建函数应用时,系统将在你的 Azure 订阅中创建以下相关资源。 资源基于你为函数应用输入的名称命名。
- 一个资源组:相关资源的逻辑容器。
- 一个标准 Azure 存储帐户:用于维护项目的状态和其他信息。
- 一个函数应用:提供用于执行函数代码的环境。 可以通过函数应用将函数分组为逻辑单元,以便在同一托管计划中更轻松地管理、部署和共享资源。
- 一个 Azure 应用服务计划,用于定义你的函数应用的基础主机。
- 一个连接到函数应用的 Application Insights 实例,用于跟踪应用中函数的使用。
创建函数应用并应用了部署包之后,会显示一个通知。
提示
默认情况下,根据为函数应用输入的名称创建函数应用所需的 Azure 资源。 默认情况下,使用函数应用在同一个新资源组中创建资源。 如果要自定义关联资源的名称或重复使用现有资源,请使用高级创建选项发布项目。
将项目部署到 Azure
重要
部署到现有函数应用将始终覆盖该应用在 Azure 中的内容。
在命令面板中,输入并选择“Azure Functions: 部署到函数应用”。
选择你刚才创建的函数应用。 当系统提示覆盖以前的部署时,请选择“部署”,将函数代码部署到新的函数应用资源。
部署完成后,选择“查看输出”,以查看创建和部署结果,其中包括已创建的 Azure 资源。 如果错过了通知,请选择右下角的铃铛图标再次查看。
在 Azure 中测试函数
在 Visual Studio Code 输出面板中,复制 HTTP 触发器的 URL。 调用 HTTP 触发的函数的 URL 必须采用以下格式:
https://<function-app-name>.azurewebsites.net/api/HelloOrchestration_HttpStart
将 HTTP 请求的这个新 URL 粘贴到浏览器的地址栏中。 使用已发布的应用时,必定获得与本地测试时相同的状态响应。
你使用 Visual Studio Code 创建和发布的 C# Durable Functions 应用已可供使用。
清理资源
如果你不再需要为完成本快速入门而创建的资源,为避免在 Azure 订阅中产生相关费用,请删除资源组和所有相关资源。
相关内容
本快速入门介绍了如何使用 Visual Studio 2022 在本地创建和测试“hello world”Durable Functions 应用。 该函数可协调对其他函数的调用并将其链接在一起。 接下来,在 Azure 中发布函数代码。 使用的工具可通过 Visual Studio 2022 中的 Azure 开发工作负载获得。
先决条件
若要完成本快速入门,你需要:
Visual Studio 2022 已安装。
确保还安装了 Azure 开发工作负荷。 Visual Studio 2019 也支持 Durable Functions 开发,但 UI 和步骤有所不同。
已安装 Azure 模拟器且其正在运行。
如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
创建函数应用项目
Azure Functions 模板创建了一个项目,可将该项目发布到 Azure 中的函数应用。 可使用函数应用将函数分组为一个逻辑单元,以便更轻松地管理、部署、缩放和共享资源。
在 Visual Studio 的“文件”菜单中,依次选择“新建”>“项目” 。
在“创建新项目”中,搜索“functions”,选择“Azure Functions”模板,然后选择“下一步”。
对于“项目名称”,请输入项目的名称,然后选择“确定”。 项目名称必须可以充当 C# 命名空间,因此请勿使用下划线、连字符或非字母数字字符。
在“其他信息”下,使用下一个表中所述的设置。
设置 操作 说明 Functions 辅助角色 选择“.NET 8 独立(长期支持)”。 创建一个支持在独立工作进程和 Azure Functions 运行时 4.0 中运行的 .NET 8 的 Azure Functions 项目。 有关详细信息,请参阅如何指向 Azure Functions 运行时版本。 Function 输入“Durable Functions 业务流程”。 创建 Durable Functions 业务流程 注意
如果在“Functions 辅助角色”菜单中未显示“.NET 8 独立(长期支持)”,可能是因为没有最新的 Azure Functions 工具集和模板。 转到“工具”>“选项”>“项目和解决方案”>“Azure Functions”>“检查更新以下载最新版本”。
要使用 Azurite 模拟器,请确保选中“将 Azurite 用于运行时存储帐户(AzureWebJobStorage)”复选框。 要使用 Durable Functions 业务流程模板创建 Functions 项目,请选择“创建”。 该项目具有运行函数所需的基本配置文件。
注意
可以为 Durable Functions 应用选择其他存储选项。 有关详细信息,请参阅 Durable Functions 存储提供程序。
在应用文件夹中,名为 Function1.cs 的文件包含三个函数。 这三个函数是 Durable Functions 应用的基本构建基块:
方法 | 说明 |
---|---|
RunOrchestrator |
定义 Durable Functions 应用业务流程。 在此示例中,业务流程启动,创建一个列表,然后将三个函数调用的结果添加到列表中。 当三个函数调用完成后,它返回该列表。 |
SayHello |
返回“hello”的简单函数应用。 此函数包含编排的业务逻辑。 |
HttpStart |
HTTP 触发的函数,用于启动业务流程的实例并返回检查状态响应。 |
有关这些函数的详细信息,请参阅 Durable Functions 类型和功能。
在本地测试函数
使用 Azure Functions Core Tools,可以在本地开发计算机上运行 Azure Functions 项目。 当你首次在 Visual Studio Code 中启动某个函数时,系统会提示你安装这些工具。
在 Visual Studio Code 中,在
SayHello
活动函数代码中设置断点,然后选择 F5。 如果系统提示,请接受 Visual Studio 的请求,下载并安装 Azure Functions Core(命令行)工具。 你还需要启用防火墙例外,这样工具才能处理 HTTP 请求。注意
有关调试的详细信息,请参阅 Durable Functions 诊断。
从 Azure Functions 运行时输出复制函数的 URL。
将 HTTP 请求的 URL 粘贴到浏览器的地址栏中并执行请求。 以下屏幕截图显示该函数在浏览器中返回的对本地 GET 请求的响应:
响应是 HTTP 函数的初始结果。 它让你知道持久业务流程已成功启动。 它尚未显示业务流程的最终结果。 响应中包括了几个有用的 URL。
此时,应当会命中活动函数中的断点,因为业务流程已启动。 逐步执行该操作以获取业务流程状态的响应。
复制
statusQueryGetUri
的 URL 值,将其粘贴到浏览器的地址栏中,然后执行请求。请求将查询业务流程实例的状态。 应该会看到实例已完成,并且它包含持久函数的输出或结果,如以下示例所示:
{ "name":"HelloCities", "instanceId":"668814ac6ce84a43a9e6757f81dbc0bc", "runtimeStatus":"Completed", "input":null, "customStatus":null, "output":"Hello, Tokyo! Hello, London! Hello Seattle!", "createdTime":"2023-01-31T16:44:34Z", "lastUpdatedTime":"2023-01-31T16:44:37Z" }
提示
了解如何通过断点观察 Durable Functions 应用的重播行为。
要停止调试,请选择 Shift + F5。
确认该函数可以在本地计算机上正确运行以后,即可将项目发布到 Azure。
将项目发布到 Azure
必须在 Azure 订阅中有函数应用才能发布项目。 可在 Visual Studio 中创建函数应用。
在“解决方案资源管理器” 中,右键单击该项目并选择“发布”。 在“目标”中选择“Azure”,然后选择“下一步”。
在“特定目标”上,选择“Azure 函数应用(Windows)”。 这会创建一个在 Windows 上运行的函数应用。 选择下一步。
在“函数实例”上,选择“创建新的 Azure 函数”。
使用下表中指定的值创建新实例:
设置 值 描述 名称 全局唯一名称 用于唯一标识新 Function App 的名称。 接受此名称或输入新名称。 有效的字符是 a-z
、0-9
和-
。订阅 你的订阅 要使用的 Azure 订阅。 接受此订阅,或从下拉列表中选择一个新订阅。 资源组 资源组的名称 你要在其中创建函数应用的资源组。 选择“新建”来创建一个新的资源组。 也可以选择使用下拉列表中的现有资源组。 计划类型 消耗 将项目发布到在消耗计划中运行的函数应用时,只需为函数应用的执行付费。 其他托管计划会产生更高的成本。 位置 应用服务的位置 在靠近你或者靠近函数访问的其他服务的 Azure 区域中选择一个位置。 Azure 存储 常规用途存储帐户 Functions 运行时需要 Azure 存储帐户。 选择“新建”即可配置常规用途存储帐户。 也可以选择使用符合存储帐户要求的现有帐户。 Application Insights Application Insights 实例 应为函数应用启用 Azure Application Insights 集成。 选择“新建”以在新的或现有的 Log Analytics 工作区中创建新实例。 也可以选择使用现有的实例。 选择“创建”,在 Azure 中创建一个函数应用及其相关资源。 资源创建的状态显示在窗口左下角。
在“函数实例”上,确保已选中“从包文件运行”复选框。 在启用从包运行模式的情况下使用 Zip 部署来部署函数应用。 建议为你的函数项目使用 Zip 部署方法,以提高性能。
选择“完成”,然后在“发布”窗格上选择“发布”,将包含项目文件的包部署到 Azure 中的新函数应用。
部署完成后,Azure 中函数应用的根 URL 将显示在“发布”选项卡上。
在“发布”选项卡上的“托管”部分中,选择“在 Azure 门户中打开”。 新的函数应用 Azure 资源将在 Azure 门户中打开。
在 Azure 中测试函数
在“发布配置文件”页上,复制函数应用的基 URL。 将 URL 的
localhost:port
部分(在本地测试函数时使用)替换为新的基 URL。调用持久函数 HTTP 触发器的 URL 必须采用以下格式:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>_HttpStart
将 HTTP 请求的这个新 URL 粘贴到浏览器的地址栏中。 测试已发布的应用时,必定获得与本地测试时相同的状态响应。
你使用 Visual Studio 创建和发布的 C# Durable Functions 应用已可供使用。
清理资源
如果你不再需要为完成本快速入门而创建的资源,为避免在 Azure 订阅中产生相关费用,请删除资源组和所有相关资源。