将web.config作为第三方Web服务提供商分发的正确方法

时间:2015-05-25 11:53:50

标签: c# asp.net .net web-services iis

我想知道什么是分发web.config的最佳方式,因为它是安装在任何机器上的Web服务的一部分。在我的情况下,web.config包含Web服务正常运行所需的http处理程序,但是一旦安装,用户就可以在IIS中为Web服务更改选项,这将更改web.config(例如,授权,连接字符串,等等。)。问题是如果我将web.config作为安装/升级的一部分,如果将​​覆盖所有用户定义的设置,但如果我不这样做,则可能缺少新的https处理程序或其他关键的新web.config设置。关于web.config发布的最佳实践是什么?

2 个答案:

答案 0 :(得分:2)

这是一个非常有趣的问题,我不确定我是否曾经遇到过这方面的最佳实践指南。它与用户将已安装的DLL更改为自定义DLL然后升级应用程序非常相似。只要MSI数据库有该DLL的记录,自定义DLL就会被替换。

我的建议是进行安装后操作(大多数安装程序,例如WIX允许您在C#中执行这些操作),这将执行以下操作:

  1. 全新安装,后期操作将Web.Install.Config复制到Web.config
  2. 用户可以将web.config修改为内容
  3. 升级,发布操作非常聪明,知道web.config存在并合并设置
  4. 您需要担心的几个问题:

    1. 显然合并设置总是很有趣(不是:))
    2. 如果您实际上已将配置文件中的现有设置更改为更好的值(例如超时),您的更改是赢还是客户更改了该怎么办?
    3. 如果他们确实完全删除了某个设置怎么办?你会读一下吗?
    4. 还有其他几个问题会推动您的设计,说实话我认为这个论坛不会让您接近满足您所有需求的解决方案。

      我很想知道你最终会得到什么。

答案 1 :(得分:2)

这取决于您在web.config中需要使用的服务。

您可以使用web.config中某些部分的ConfigSource属性将该部分中的所有设置移至外部辅助文件。

例如:

<system.webServer><handlers ConfigSource="httphandlers.config" />

然后,您可以自己更新httphandlers.config,而不必担心客户对其进行任何修改。

如果您的客户需要添加自己的http处理程序,则会出现问题,然后您遇到与以前相同的问题。

您不应该在ConfigSource上加<appSettings>,而是定义自己的configSection,然后将该部分放入辅助文件中。与您的服务相关的所有设置都应该在那里。

因此,只要您不与客户共享某个部分,这应该有效。

这只是一个概念,我自己也没有在生产中使用它。