C# 你能在Azure函数的全局字典中存储一个值吗

C# 你能在Azure函数的全局字典中存储一个值吗,c#,azure,azure-functions,C#,Azure,Azure Functions,我已经创建了一个带有2个HTTP触发器的azure函数,现在我面临的问题是我需要将第一个HTTP触发器中的值存储在一个字典中,如下所示 static Dictionary<int, TargetRequest> Target = new Dictionary<int, TargetRequest>(); 静态字典目标=新字典(); 这在我的函数类内部,但在触发器外部。 现在,在另一个HTTP触发器之后,我需要从字典中检索该值并使用它,但只有在它收到一个触发器之后。作为

我已经创建了一个带有2个HTTP触发器的azure函数,现在我面临的问题是我需要将第一个HTTP触发器中的值存储在一个字典中,如下所示

static Dictionary<int, TargetRequest> Target = new Dictionary<int, TargetRequest>();
静态字典目标=新字典();
这在我的函数类内部,但在触发器外部。 现在,在另一个HTTP触发器之后,我需要从字典中检索该值并使用它,但只有在它收到一个触发器之后。作为Azure的全新成员,我不确定该字典中的值是否保持不变,因为它似乎在localhost上起作用,但在部署到Azure时却不起作用。如果他们不这样做,还有什么别的办法呢。使用Azure队列存储是存储此值的方法还是有其他方法

Ps:TargetRequest是一个c类,如果这有什么区别的话


干杯

如果您将函数设置为singleton模式,您应该能够在Function2中获得Function1的静态字典

如果您的函数未处于单例模式,您可以将数据保存在外部,例如队列或临时文件。

除非您使用的是Perkins提到的(它本身就很复杂,您需要了解),否则您需要想象每次运行时,您的函数的每个实例都在新的不同笔记本电脑上运行。要强调,一次运行=一台新的/不同的笔记本电脑。您永远不能依赖“实例重用”,即同一台笔记本电脑在两次不同的运行中被使用两次。当然,这纯粹是从设计的角度来看的

两种选择:

  • 使用
  • 使用适当的服务构建您自己的缓存。存储Q不是一个合适的选择。更好的例子是,任何事务数据库、ADL等。请参阅Azure提供的一些缓存。这是SaaS/云世界中的一个常见问题

  • Azure函数是无服务器的。您需要执行一些代码。它从请求或存储(总线、数据库blob队列等)获取一些数据。也许这是可能的,但不要这样做。是的,我担心会是这样,那么在IIS中托管服务器应用程序会是一种方式吗,因为它需要公开访问,或者在Azure或AWS中是否有另一种非无服务器解决方案?请参阅。还可以查看您的功能是否始终是单例的,从第一个触发器获取静态字典应该没有问题。如果无法保证单例操作,您可以将数据保存到外部,例如队列或临时文件等。只是想知道您是否在高流量环境中测试过此功能,在这种环境中,服务器可以扩展并创建多个功能实例?即使在云中测试时,这一功能以某种方式起作用,无服务器函数不保证在同一(虚拟)服务器中运行,也不保证在同一内存空间中运行,也不保证在多次调用中保持不变。这是一个非常糟糕的想法,不会扩展,最终会失败。@CPerkins谢谢,我只做了一个简单的测试。将进行编辑,但没有编辑:(@zolty13我以前已经更改了答案。