你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Visual Studio 将函数连接到 Azure 存储

无需编写自己的集成代码,即可使用 Azure Functions 将 Azure 服务和其他资源连接到函数。 这些绑定表示输入和输出,在函数定义中声明。 绑定中的数据作为参数提供给函数。 触发器是一种特殊类型的输入绑定。 尽管一个函数只有一个触发器,但它可以有多个输入和输出绑定。 有关详细信息,请参阅 Azure Functions 触发器和绑定的概念

本文介绍如何使用 Visual Studio 将在前一篇快速入门文章中创建的函数连接到 Azure 存储。 添加到此函数的输出绑定会将 HTTP 请求中的数据写入到 Azure 队列存储队列中的消息。

大多数绑定都需要一个存储的连接字符串,函数将使用该字符串来访问绑定的服务。 为便于操作,请使用连同函数应用一起创建的存储帐户。 与此帐户建立的连接已存储在名为 AzureWebJobsStorage 的应用设置中。

先决条件

在开始学习本文之前,必须:

下载函数应用设置

前一篇快速入门文章中,你已在 Azure 中创建了一个函数应用,并创建了所需的存储帐户。 此帐户的连接字符串安全存储在 Azure 中的应用设置内。 在本文中,你要将消息写入到同一帐户中的存储队列。 若要在本地运行函数时连接到该存储帐户,必须将应用设置下载到 local.settings.json 文件。

  1. 在“解决方案资源管理器” 中,右键单击该项目并选择“发布”。

  2. 在“托管”下的“发布”选项卡中,展开三个点 (...) 并选择“管理 Azure 应用服务”设置。

    编辑应用程序设置

  3. 在“AzureWebJobsStorage”下,将“Remote”字符串值复制到“Local”,然后选择“确定”。

现在,使用 AzureWebJobsStorage 设置建立连接的存储绑定可以在本地运行时连接到队列存储。

注册绑定扩展

由于你使用的是队列存储输出绑定,因此在运行项目之前,需要安装存储绑定扩展。 绑定(HTTP 和计时器触发器除外)将实现为扩展包。

  1. 在“工具”菜单中,选择“NuGet 包管理器”>“包管理器控制台”。

  2. 在控制台中,运行以下 Install-Package 命令安装存储扩展:

    Install-Package Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues
    

现在,你可以将存储输出绑定添加到项目。

添加输出绑定

在 C# 项目中,绑定被定义为函数方法上的绑定属性。 具体定义取决于应用是在进程内(C# 类库)还是在独立工作进程中运行。

打开 HttpExample.cs 项目文件并添加以下 类:

public class MultiResponse
{
    [QueueOutput("outqueue",Connection = "AzureWebJobsStorage")]
    public string[] Messages { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

MultiResponse 类允许写入到名为 outqueue 的存储队列和 HTTP 成功消息。 可以将多条消息发送到该队列,因为 QueueOutput 属性应用于一个字符串数组。

Connection 属性设置存储帐户的连接字符串。 在本例中,可以省略 Connection,因为你已使用默认存储帐户。

添加使用输出绑定的代码

定义绑定后,可以使用绑定的 name,将其作为函数签名中的属性进行访问。 使用输出绑定时,无需使用 Azure 存储 SDK 代码进行身份验证、获取队列引用或写入数据。 Functions 运行时和队列输出绑定将为你执行这些任务。

将现有 HttpExample 类替换为以下代码:

    [Function("HttpExample")]
    public static MultiResponse Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
        FunctionContext executionContext)
    {
        var logger = executionContext.GetLogger("HttpExample");
        logger.LogInformation("C# HTTP trigger function processed a request.");

        var message = "Welcome to Azure Functions!";

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        response.WriteString(message);

        // Return a response to both HTTP trigger and storage output binding.
        return new MultiResponse()
        {
            // Write a single message.
            Messages = new string[] { message },
            HttpResponse = response
        };
    }
}

在本地运行函数

  1. 若要运行函数,请在 Visual Studio 中按 F5。 你可能需要启用防火墙例外,这样工具才能处理 HTTP 请求。 在本地运行函数时,永远不会强制实施授权级别。

  2. 从 Azure Functions 运行时输出复制函数的 URL。

    Azure 本地运行时

  3. 将 HTTP 请求的 URL 粘贴到浏览器的地址栏中并运行请求。 下图显示了浏览器中由函数返回的本地 GET 请求的响应:

    浏览器中的函数 localhost 响应

  4. 若要停止调试,请在 Visual Studio 中按 Shift+F5

首次使用输出绑定时,Functions 运行时会在存储帐户中创建名为 outqueue 的新队列。 将使用存储资源管理器来验证队列是否与新消息一起创建。

将存储资源管理器连接到帐户

如果已安装 Azure 存储资源管理器并已将其连接到 Azure 帐户,请跳过此部分。

  1. 运行 Azure 存储资源管理器工具,选择左侧的连接图标,并选择“添加帐户”。

    幕截图显示如何将 Azure 帐户添加到 Microsoft Azure 存储资源管理器。

  2. 在“连接”对话框中,依次选择“添加 Azure 帐户”、你的 Azure 环境和“登录...”。

    “登录到 Azure 帐户”窗口的屏幕截图。

成功登录到帐户后,将看到与你的帐户关联的所有 Azure 订阅。 选择你的订阅并选择“打开资源管理器”。

检查输出队列

  1. 在存储资源管理器中,展开“队列”节点,然后选择名为 outqueue 的队列。

    此队列包含在运行 HTTP 触发的函数时队列输出绑定创建的消息。 如果使用 Azure 的默认 name 值调用了此函数,则队列消息为“传递给函数的名称: Azure”。

    Azure 存储资源管理器中显示的队列消息的屏幕截图。

  2. 再次运行函数,发送另一个请求,此时会看到新消息出现在队列中。

现在,可将更新的函数应用重新发布到 Azure。

重新部署并验证更新的应用

  1. 在“解决方案资源管理器”中,右键单击项目并选择“发布”,然后选择“发布”将项目重新发布到 Azure。

  2. 部署完成后,可以再次使用浏览器测试重新部署的函数。 如前所述,请在 URL 的后面追加查询字符串 &name=<yourname>

  3. 可以查看存储队列中的消息,以再次确认输出绑定是否在队列中生成了新的消息。

清理资源

本教程系列中的其他快速入门教程是在本文的基础上制作的。 如果打算使用后续的快速入门、教程或者在本快速入门中创建的任何服务,请勿清理这些资源。

Azure 中的资源是指函数应用、函数、存储帐户等。 这些资源可以组合到资源组中,删除该组即可删除组中的所有内容。

你已创建完成这些快速入门所需的资源。 这些资源可能需要付费,具体取决于帐户状态服务定价。 如果不再需要这些资源,请参阅下面介绍的资源删除方法:

  1. 在 Azure 门户中转到“资源组”页。

    若要从函数应用页转到该页,请选择“概览”选项卡,然后选择“资源组”下的链接。

    屏幕截图,显示如何从函数应用页选择要删除的资源组。

    若要从仪表板转到该页,请选择“资源组”,然后选择用于本文的资源组。

  2. 在“资源组”页中查看所包括的资源的列表,然后验证这些资源是否是要删除的。

  3. 选择“删除资源组”,然后按说明操作。

    删除操作可能需要几分钟。 完成后会显示一个通知,持续数秒。 也可以选择页面顶部的钟形图标来查看通知。

后续步骤

现已更新 HTTP 触发的函数,使其将数据写入存储队列。 若要详细了解如何开发 Functions,请参阅使用 Visual Studio 开发 Azure Functions

接下来,应为函数应用启用 Application Insights 监视: