मैं क्या करने की कोशिश कर रहा हूँ: मैं aure में चाबियाँ बदलने में सक्षम होने के लक्ष्य के साथ, एज़्योर ऐप कॉन्फ़िगरेशन में एक प्रहरी कुंजी के साथ .net कोर 2.1 mvc वेब एप्लिकेशन के साथ Azure ऐप कॉन्फ़िगरेशन सेटअप करने का प्रयास कर रहा हूं, और कोई भी कुंजी नहीं। मेरे ऐप्स में तब तक अपडेट रहेगा जब तक कि प्रहरी मूल्य नहीं बदल जाता। सिद्धांत रूप में, यह मुझे सुरक्षित रूप से गर्म स्वैप कॉन्फ़िगर करने की अनुमति देनी चाहिए।
मेरा मुद्दा क्या है: जब मैं ऐसा करता हूं तो IWebHostBuilder पर प्रहरी देखने के लिए कोई WatchAndReloadAll () विधि उपलब्ध नहीं है, और वैकल्पिक रीफ़्रेश () विधियाँ उस स्थिति को ताज़ा करने के लिए ताज़ा नहीं लगती हैं।
पृष्ठभूमि की जानकारी, और जो मैंने कोशिश की है: मैंने वीएस लाइव - सैन डिएगो में भाग लिया, यह पिछले सप्ताह और एज़्योर ऐप कॉन्फ़िगरेशन पर एक डेमो देखा। मेरे पास कुछ समस्याएँ थीं, जो इसे मानने के दौरान कॉन्फिगरेशन को रीफ्रेश करने के लिए एप्लिकेशन प्राप्त करने की कोशिश कर रही थीं, इसलिए मैंने इस डेमो को भी संदर्भित किया का वर्णन किया कि यह कैसे करना है। संबंधित अनुभाग लगभग 10 मिनट में है। हालांकि, यह विधि IWebHostBuilder पर उपलब्ध नहीं है।
दस्तावेज़ीकरण मैं संदर्भित कर रहा हूँ: आधिकारिक दस्तावेज में इस पद्धति का कोई संदर्भ नहीं है doc quickstart .net कोर और डॉक्टर गतिशील कॉन्फ़िगरेशन .net कोर देखें।
मेरा पर्यावरण: Microsoft नेटवर्क्स के लिए नवीनतम प्रीव्यू नगेट पैकेज के साथ विजुअल स्टूडियो एंटरप्राइज 2019 से डॉट नेट कोर 2.1 का उपयोग किया जा रहा है।अस्पेक्टरकोर। 2.0 नेट-पूर्वावलोकन-010060003-1250
मेरा कोड: डेमो में, उन्होंने CreateWebHostBuilder (स्ट्रिंग [] args) विधि के माध्यम से एक IWebHostBuilder बनाया है:
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
options.Connect(settings["ConnectionStrings:AzureConfiguration"])
.Use(keyFilter: "TestApp:*")
.WatchAndReloadAll(key: "TestApp:Sentinel", pollInterval: TimeSpan.FromSeconds(5));
});
})
.UseStartup<Startup>();
}
मैंने भी इस तरह की कोशिश की, वर्तमान प्रलेखन का उपयोग कर:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
{
// fetch connection string from local config. Could use KeyVault, or Secrets as well.
options.Connect(settings["ConnectionStrings:AzureConfiguration"])
// filter configs so we are only searching against configs that meet this pattern
.Use(keyFilter: "WebApp:*")
.ConfigureRefresh(refreshOptions =>
{
// In theory, when this value changes, on the next refresh operation, the config will update all modified configs since it was last refreshed.
refreshOptions.Register("WebApp:Sentinel", true);
refreshOptions.Register("WebApp:Settings:BackgroundColor", false);
refreshOptions.Register("WebApp:Settings:FontColor", false);
refreshOptions.Register("WebApp:Settings:FontSize", false);
refreshOptions.Register("WebApp:Settings:Message", false);
});
});
})
.UseStartup<Startup>();
फिर, मेरे स्टार्टअप क्लास में:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<Settings>(Configuration.GetSection("WebApp:Settings"));
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseAzureAppConfiguration();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
और अंत में मेरी सेटिंग्स विन्यास मॉडल:
public class Settings
{
public string BackgroundColor { get; set; }
public long FontSize { get; set; }
public string FontColor { get; set; }
public string Message { get; set; }
}
अब, अपने नियंत्रक में, मैं उन सेटिंग्स को खींचता हूं और उन्हें दृश्य पर प्रदर्शित होने के लिए एक दृश्य बैग में फेंक देता हूं।
public class HomeController : Controller
{
private readonly Settings _Settings;
public HomeController(IOptionsSnapshot<Settings> settings)
{
_Settings = settings.Value;
}
public IActionResult Index()
{
ViewData["BackgroundColor"] = _Settings.BackgroundColor;
ViewData["FontSize"] = _Settings.FontSize;
ViewData["FontColor"] = _Settings.FontColor;
ViewData["Message"] = _Settings.Message;
return View();
}
}
परिवर्तनों को प्रदर्शित करने के लिए एक सरल दृश्य:
<!DOCTYPE html>
<html lang="en">
<style>
body {
background-color: @ViewData["BackgroundColor"]
}
h1 {
color: @ViewData["FontColor"];
font-size: @ViewData["FontSize"];
}
</style>
<head>
<title>Index View</title>
</head>
<body>
<h1>@ViewData["Message"]</h1>
</body>
</html>
मैं इसे पहली बार कॉन्फ़िगर को नीचे खींचने के लिए प्राप्त कर सकता हूं, हालांकि, ताज़ा कार्यक्षमता किसी भी तरह से काम नहीं करती है।
पिछले उदाहरण में, मुझे उम्मीद थी कि जब किसी नए मूल्य पर सेंटिनल सेट किया गया था, या बहुत कम से कम, 30 सेकंड के बाद इसे बदलने के बाद किसी वैल्यू को अपडेट करने के लिए कॉन्फिगर्स अपडेट करें। प्रतीक्षा की कोई लंबाई मूल्यों को अपडेट नहीं करती है, और केवल एक पूर्ण शट डाउन और ऐप को पुनरारंभ करने से नया कॉन्फ़िगरेशन लोड होता है।
अपडेट: ऐप जोड़ना। UseAzureAppConfiguration (); स्टार्टअप पर कॉन्फ़िगर विधि में, और एक निश्चित समय के बाद ताज़ा करने के लिए ताज़ा विधि को कैश के लिए कैश पर एक स्पष्ट समयावधि निर्धारित करना है, लेकिन प्रहरी कार्यक्षमता अभी भी काम नहीं करती है, और न ही अपडेट विधि पर ताज़ा करें झंडा।
ConfigureServices
कि startuop.cs में आपकी विधि में कहीं न कहीं कुछ विन्यास बाध्यकारी होगा , जैसेservices.Configure<LogSettings>(configuration.GetSection("LogSettings"));