Azure Functions:绑定到 DocumentClient 与静态实例 - 推荐什么?

2023-11-27

我知道如何将查询直接绑定到 Azure 函数并在函数中使用 Cosmos DB 触发器。

但是,我正在寻找使用方向DocumentClient(努吉特包Microsoft.Azure.Cosmos) 直接地。

  1. There's 文档这解释了如何在执行之间重用静态客户端实例。
  2. 也可以获得DocumentClient通过添加实例作为绑定[DocumentDB("test", "test", ConnectionStringSetting = "CosmosDB")] DocumentClient client到函数的参数。
  3. 最后,可以创建一个DocumentClient函数体内的实例:var client = new DocumentClient(...).

我没有找到明确的建议何时使用什么方法,只是由于性能、内存使用和连接限制,第 3 种方法从来都不是一个好的选择。另外,我知道使用静态实例有优点。

问题

  • Azure 函数有连接限制(在这里讨论)。使用方法 2(绑定到客户端)时这是否也适用?
  • 使用方法 2(绑定)与方法 1(静态)相比有何优缺点?
  • 与绑定到 SQL 查询相比,绑定到 SQL 查询有什么优势?DocumentClient并在函数体内创建查询?

还有另一种使用 DocumentClient 的方法。 从 Microsoft.NET.Sdk.Functions 版本 1.0.28 开始,现在可以使用 FunctionsStartup 类初始化 DocumentClient 一次,然后将其注册为 DI(依赖注入),然后每次都使用相同的实例。

FunctionsStartup 类已记录here。更好的解释是here.

在 Startup 的配置方法中,构建您的客户端。

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyApp.Startup))]
namespace MyApp
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            IDocumentClient client = GetCustomClient();
            builder.Services.AddSingleton<IDocumentClient>(client);
        }
}

然后可以将其注入到函数构造函数中并由方法使用。

public class MyFunction
{
    private IDocumentClient _client;

    public MyFunction(IDocumentClient client)
    {
        _client = client;
    }

    [FunctionName("MyFunction")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        // use _client here.
    }
}

当 Azure 创建此类的实例来服务请求时,它会传递在 FunctionsStartup 类中创建的 IDocumentClient 实例。

这一策略允许重复使用同一 DocumentClient 实例。这个客户端的单一性不是通过使其静态来强制的,而是通过确保我们只创建它一次。这也有助于提高可测试性,因为测试可以注入 IDocumentClient 的不同实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure Functions:绑定到 DocumentClient 与静态实例 - 推荐什么? 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • Azure 网站服务器时区数据错误

    我来自俄罗斯 1 5 天前 10 月 26 日凌晨 2 点 我们的时区 好吧 我们时区的偏移量 发生了变化 从 UTC 4 变为 UTC 3 请不要问为什么现在 政府已经退出了 但它改变了 我家的Win 8 1机器自动更新 但我的 Azur
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • 如何使用 C# sql server 将新行添加到现有表

    我需要写一个程序 该程序的一部分是写入 SQL 数据库 mdf 我在尝试向表中添加新行 称为 数据 时遇到了很多麻烦 这是代码 DataSet ds new DataSet System Data SqlClient SqlDataAdap
  • 如何通过添加数字来创建唯一的文件名?

    我想创建一个方法 它将文件名作为string or a FileInfo如果文件存在 则在文件名中添加一个递增的数字 但我无法完全理解如何以一种好的方式做到这一点 例如 如果我有这个 FileInfo var file new FileIn
  • jquery attr("onClick") - ie 和 ff

    使用 jquery 我想从 A 标签的 onClick 属性获取 javascript a href a 在火狐中 alert a attr onClick shows alert boo 在 IE 6 7 中 alert a attr o
  • 如何在javascript中解析具有两位小数的浮点数?

    我有以下代码 我希望如果price result 等于一个整数 比如说10 那么我想添加两位小数 所以 10 就是 10 点 或者如果它等于 10 6 则为 10 60 不知道该怎么做 price result parseFloat tes
  • python - 计算每个数字出现的次数

    我有一长串用逗号分隔的数字 我可以搜索并统计大多数数字 或更准确地说 2 位数字 出现的次数 如果我有一个像这样的数字序列 1 2 3 4 5 1 6 7 1 8 9 10 11 12 1 1 2我想数一下这个数字有多少次1看来我真的应该得
  • 使用 python 和 selenium 连接到 phantomJs webdriver 时遇到问题

    我正在尝试在使用 selenium 和 phantomjs webdriver 的 Linux 服务器上运行 python 脚本 但是 我不断收到以下错误消息 selenium common exceptions WebDriverExce
  • SwiperJS 样式不适用于 NextJS

    我已经安装了SwiperJS进入我的NextJS项目 我完全遵循了 Swiper 教程文档 但是当我尝试对类进行样式设计时出现问题 swiper swiper slide 样式不响应我的自定义样式 就我而言 我的滑块是一个组件 并且有一个名
  • 增加 iOS 5.x 中 UITextView 中表情符号字符的字体大小

    如果我有 UITextView 并将字体大小设置为 32 当我运行应用程序 在模拟器和设备上 时 我会看到一个大光标 并且我键入的文本就像我想象的那样出现 但如果我切换表情符号键盘 它们会显示很小 就像字体大小从未增加一样 我知道这些表情符
  • 从 Visual Studio 2015 构建时自动发布 Web 应用程序

    有没有什么方法可以在成功构建时使用预先创建的发布配置文件自动发布 Web 应用程序 我不想必须单击发布图标 需要在 Visual Studio 2015 上成功构建 Web 项目时发生这种情况 不使用宏 任何样品将不胜感激 拉米的解决方案有
  • 检查空手道的 2 个不同状态

    我有一个关于空手道框架的问题 我想知道我们是否可以检查空手道的 2 状态 例如 给定 url myUrl 当方法得到 然后状态 200 或 204 感谢您的帮助 Yes Then assert responseStatus 200 resp
  • C++:除了虚函数之外,还有哪些原因导致“未定义引用‘typeinfo for [class name]’”

    其中一些错误可以通过修改来解决 virtual void draw to virtual void draw 但是 除了虚拟函数之外 这些错误的其他原因可能是什么 出现以下错误可能是什么原因 tmp cciGEgp5 o rodata ZT
  • 标签、复选框和单选按钮

    我的网络应用程序使用如下例所示的表单 First Name Last Name Gender Male Female 我使用的标记类似于
  • 隐藏 Android 键盘按键预览

    我想要做的是仅隐藏显示您在使用软键盘时当前按下的键的弹出窗口 这可能吗 我正在创建自己的新键盘 不需要它们 据我所知 下图是实际的弹出键盘 您可以选择使用它来显示android popupKeyboard and android popup
  • 在javascript中获取DIV的宽度和高度

    我试图在用户更改时获取 div 宽度和高度 并将该数字提交到另一个页面 我似乎不知道如何获得宽度和高度
  • 如何在 Scala 中对可变长度的重复序列进行分组

    我有一个以某种模式重复的整数集合 val repeatingSequence List 1 2 3 1 2 3 4 1 2 1 2 3 4 5 当模式重复时 我想将该列表分段 在这种情况下 当序列返回到 1 时 val groupedByS
  • 使用 Kubernetes kubeadm 和 minikube 在虚拟机中创建节点

    我正在尝试使用同一台机器创建具有不同数量节点的 Kubernetes 集群 在这里 我想创建单独的虚拟机 并需要在这些虚拟机中创建节点 我目前正在探索 kubeadm 和 minikube 来完成这些任务 在探索的过程中 我有以下困惑 我需
  • 如何将一个元素移动到另一个元素中

    我想将一个 DIV 元素移动到另一个 DIV 元素中 例如 我想移动这个 包括所有孩子 div div 进入这个 div div 这样我就有了这个 div div div div 您可能想使用appendTo函数 添加到元素的末尾 sour
  • Express Node.js 不起作用

    我在 ubuntu 12 04 上安装了express 4以及node js npm和express generator 并使用以下命令创建了一个应用程序 express test hogan c less cd test npm inst
  • SearchBuf soWholeWord 意外输出

    测试时StrUtils SearchBuf with soWholeWord soDown 选项 出现了一些意想不到的结果 program Project1 Uses SysUtils StrUtils function WordFound
  • Azure Functions:绑定到 DocumentClient 与静态实例 - 推荐什么?

    我知道如何将查询直接绑定到 Azure 函数并在函数中使用 Cosmos DB 触发器 但是 我正在寻找使用方向DocumentClient 努吉特包Microsoft Azure Cosmos 直接地 There s 文档这解释了如何在执