ASP.NET:存储应用程序设置的位置?
最近,我发现“Web.Config”文件包含< appSettings>对于存储一个应用程序设置似乎很好的部分.哎呀,它甚至有一种通过标准系统库访问文件的编程方式.所以聪明一点,我写了一个接口来访问它,然后是接口的具体实现,如下所示:
public interface IAppSettings { IEnumerable<string> GetValues(string componentName,string settingName); IEnumerable<KeyValuePair<string,string>> GetValuePairs(string componentName,string settingName); void SetValues(string componentName,string settingName,IEnumerable<string> valueList,bool append); void SetValuePairs(string componentName,IEnumerable<KeyValuePair<string,string>> pairList,bool append); } 然后我发现saving settings back to “web.config” while the application is running causes the entire application to re-start.这对我来说似乎完全不合理,因为如果我回写web.config并且应用程序每次都重新启动,那么像HttpRuntime.Cache这样的东西会被完全清空,从而使我的Cache无用,因为它不断清空和重新填充. 所以我想知道:我应该在哪里存储我的应用程序设置? 有没有一个很好的解决方案,所以我不必自己滚? 编辑: 好的,感谢所有建议使用数据库和潜在表模式的人.我想我将采用以下架构: settings: index NUMBER NOT NULL AUTO_INCREMENT <== Primary Key component NVARCHAR(255) NOT NULL setting NVARCHAR(255) NOT NULL key NVARCHAR(255) value NVARCHAR(255) NOT NULL 虽然我不认为我会“设置”P-Key,但使用Auto-Incr索引代替.这样,如果我有一个应用程序需要向多个管理器发送邮件,我可以存储许多: index component setting value 1 RequestModule ManagerEmail manager1@someplace 2 RequestModule ManagerEmail manager2@someplace 然后我可以使用: IEnumerable<string> GetValues(string componentName,string settingName); 它将返回一个电子邮件地址列表,而不仅仅是一个值. 这有意义吗? 解决方法
web.config通常用于只读设置,即.系统管理员在部署应用程序期间设置的设置.
如果要读取和写入设置,最明显的方法是使用数据库.顺便说一句,这有一个优点:应用程序可以托管在多个服务器上,仍然可以正确读写设置, 您还可以为设置实现自定义存储,但实现起来可能更困难,而且速度也不快. 要回答第二个问题,数据库的结构取决于要存储的设置类型. 如果您需要存储异构的唯一条目,如下所示: >管理员的邮箱地址, 那么你必须使用varchars或其他或多或少友好类型作为键来识别条目(而不是通过它们的索引来引用它们). 另一方面,如果您的目的是存储多个管理器的邮件地址,则应创建一个Manager表,其中包含其邮件地址,名称,上次连接的日期时间等. 你真的不应该混合两者.理论上,您可以通过组件/设置对参考设置中的条目.在实践中,它会使事情变得更难并产生一系列问题: >如果您还需要为每位经理存储一个布尔值,表明她/他是否希望收到您的提醒,该怎么办?根据您当前的结构,这是不可能的.>由于相同的设置可以有多个值,您打算如何处理必须唯一的设置?例如,“关于我们”页面上只能显示一个文本值.如果数据库中存储了两个值,该怎么办? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 如何在asp.net mvc中模拟缓存对象?
- asp.net-mvc-3 – MvcContrib网格和复选框
- 如果您已实施ASP.NET路由,则ASP.NET中的PageMethods无法正常
- 为什么System.Attribute的GetHashCode方法需要如此设计?
- asp.net中的javascript
- 加快ASP.NET中的构建时间
- asp.net – 如何调试Azure 500内部服务器错误[已关闭]
- 【.Net码农】认识ASP.NET MVC的5种AuthorizationFilter
- asp.net-core – ASP.NET 5(MVC6)如何为用户播种
- asp.net-mvc – 为什么ListBoxFor不选择项目,但ListBox是?
- asp.net – FormView无法显示
- asp.net – Web部署项目构建不再属于项目的文件
- 如何在ServiceStack服务实现中使用标准的ASP.NET
- entity-framework – 如何升级EF Core Tools
- asp.net – 在Visual Studio Ultimate中找不到打
- iis – 将整个经典ASP网站重定向到新域名的最佳方
- asp.net – WCF服务问题 – 不支持协议“http”.
- asp.net-mvc – ASP.NET MVC AcceptVerbs和注册路
- 如何在ASP.NET网页中嵌入代码块?
- 身份验证 – 如何为Asp.NET MVC 5创建ClaimsIden