如何在运行时更改 HttpRuntime 设置(例如 WaitChangeNotification)
本文关键字:设置 例如 WaitChangeNotification HttpRuntime 运行时 | 更新日期: 2023-09-27 17:56:18
通过在 xml 文件中键入设置,很容易在 web.config 中设置设置。但是,我想在运行时设置一些设置。
具体来说,我想设置 system.web/httpRuntime/WaitChangeNotification 设置。
我已经尝试过这个,但它抛出一个错误,说配置是只读的。
var section = HttpContext.Current.GetSection("system.web/httpRuntime") as System.Web.Configuration.HttpRuntimeSection;
section.WaitChangeNotification = 6;
这不是一个好主意,但这使用反射是完全可能的。
下面是将 Soap 扩展注入应用配置的 Web 服务部分的代码示例:
// Turn the read only field non-readonly
WebServicesSection wss = WebServicesSection.Current;
SoapExtensionTypeElement e = new SoapExtensionTypeElement(typeof (TraceExtension), 1, PriorityGroup.High);
FieldInfo readOnlyField = typeof(System.Configuration.ConfigurationElementCollection).GetField("bReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
readOnlyField.SetValue(wss.SoapExtensionTypes, false);
// Bind to web services section of config
wss.SoapExtensionTypes.Add(e);
// Restore the original so other things don't break
MethodInfo resetMethod = typeof(System.Configuration.ConfigurationElementCollection).GetMethod("ResetModified", BindingFlags.NonPublic | BindingFlags.Instance);
resetMethod.Invoke(wss.SoapExtensionTypes, null);
MethodInfo setReadOnlyMethod = typeof(System.Configuration.ConfigurationElementCollection).GetMethod("SetReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
setReadOnlyMethod.Invoke(wss.SoapExtensionTypes, null);
显然,这不是追溯性的,因此它只会在完成后影响从配置中提取的值。
。再一次,你可能不想这样做,但这是可能的。
有一个不同的 API 来编辑配置文件。简而言之,您可以使用 WebConfigurationManager 打开配置文件以获取配置对象,对其进行修改,然后使用 Save 方法之一保存文件。
有关详细信息,请参阅从 MSDN 编辑 ASP.NET 配置文件。另请注意,修改配置文件将重新启动应用程序。