簡體   English   中英

是否可以從 Azure function 中保留環境設置?

[英]Is it possible to persist an environment setting from within an Azure function?

我創建了一個 Azure Function 從網站檢索新的表單輸入,處理它們並將結果存儲在另一個系統中,方法是使用 API 調用。 我只想檢索以前未處理的表單輸入。 這得到了網站的支持。 我正在讀取已處理的最新表單輸入的時間戳。 這工作正常。

我正在使用以下 function 從 Azure function 環境中讀取設置:

private static string GetEnvironmentVariable(string name)
{
    return System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

處理完表單輸入后,我使用以下 function 存儲表單的時間戳:

private static void SetEnvironmentVariable(string name, string value)
{
    System.Environment.SetEnvironmentVariable(name, value, EnvironmentVariableTarget.Process);
}

一切似乎都運行良好。 我在日志中看到表單輸入不會被多次處理。 但是,當我查看 Azure 儀表板中的環境變量時,我可以看到變量的初始值仍然存在。 當環境“關閉”並重新啟動時(例如在更改另一個環境變量的值之后),將使用此初始值。

我試圖將目標從“進程”更改為“機器”,但這會導致訪問控制錯誤。 SO上有一些與我的問題相關的問題,但沒有一個問題可以為我的情況提供答案。

我想知道是否:

  1. 環境變量是 / 適合我的用例的解決方案;
  2. 如果是這樣,如何防止在重置 Azure 環境后將變量重置為其初始值。

提前致謝!

首先, Environment.SetEnvironmentVariable方法已經在您的案例中起作用。

以下是來自 Hury Shen 的回答

當您通過 Environment.SetEnvironmentVariable 設置變量時,它不會顯示在應用程序設置中。 但是我們可以按預期通過 Environment.GetEnvironmentVariable 使用它。 雖然你提到的解決方案不是很好,但它可以實現你的要求。 不利影響是當您重新啟動 function 應用程序時,變量將丟失。

關於目標Machine :環境變量從 Windows 操作系統注冊表中的HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment鍵存儲或檢索。 此值應僅用於在 Windows 系統上運行的 .NET 實現。


一種實現但未設置內部代碼的方法:

在應用服務中,您可以在應用代碼之外設置應用設置 然后,您可以使用標准 ASP.NET 核心依賴注入模式在任何 class 中訪問它們:

using Microsoft.Extensions.Configuration;

namespace SomeNamespace 
{
    public class SomeClass
    {
        private IConfiguration _configuration;
    
        public SomeClass(IConfiguration configuration)
        {
            _configuration = configuration;
        }
    
        public SomeMethod()
        {
            // retrieve nested App Service app setting
            var myHierarchicalConfig = _configuration["My:Hierarchical:Config:Data"];
            // retrieve App Service connection string
            var myConnString = _configuration.GetConnectionString("MyDbConnection");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM