2014-10-03 47 views
2

我一直在互联网上漫游,找出最佳解决方案是什么,但我似乎找不到满意的答案。在发布模式中,您的web.config中的programmactly更改

我的问题是,我希望我的网站管理员能够更改服务器设置(电子邮件,密码和Exchange服务器端点URL) - 这应该可以在浏览器中执行,所以管理员不会必须打开web.config文件。 设置很少设置,但它的可能性存在。

我现在做的是,一旦管理员填写自己的状态,我的控制器将设置新的值在web.config的AppSettings:

<appSettings> 
     <add key="ewsUser" value="[email protected]" /> 
     <add key="ewsPW" value="somePW" /> 
     <add key="ewsUrl" value="https://outlook.ews.com/xxx.asmx" /> 
    </appSettings> 

这是我的大问题开始的地方,因为我所有的研究都在互联网上进行。 假设我的应用程序现在在线,并且正在被数百人全天候使用,那么这个解决方案会成为一个问题吗? 我读过,如果你改变你的web.config文件,它会让你的应用程序在服务器上重新启动,而不会丢掉任何客户端。但是,这会影响客户在那一刻正确的会话吗?服务器会忘记他们的会话吗?

我读过一些坏习惯,this article说明了如何通过在web.config AppSettings中创建一个新的.config文件并链接到该配置文件来解决这个问题。但这真的有必要吗?我发现它比我现在的解决方案更混乱。

任何想法,想法和/或事实都将被评价。

回答

0

写入web.config确实是一个不好的做法。更改web.config文件时,应用程序将重新启动。虽然不确定会议,但他们可能会重置。那么你部署新版本的应用程序并意外覆盖web.config的情况如何? 两种解决方案可能会有所帮助:

  • 在数据库中创建一个简单的键/值表
  • 创建自定义的XML格式和读/写一个文件(并命名例如mysettings.config文件,而不是mysettings.xml以防止直接从网络浏览器访问)

要加快速度,可以在读取后将这些值缓存在内存中。

+0

谢谢你的回答Marthijn--你的两个解决方案也在我的“选择桶”中。现在是一个后续问题。上述哪一种解决方案最难入侵?请记住,数据库中的数据将被加密和腌制(密码至少)。 – Adam 2014-10-06 09:32:06

+1

取决于,如果您已经有数据库运行它可能是最简单的。 XML也不是那么难,只是使用序列化,.NET将处理它。我也应该在XML文件中加密密码。 – Marthijn 2014-10-06 14:24:31