以编程方式修改自托管服务的web.config(而不是通过更改applicationHost.config)

时间:2016-06-20 21:04:40

标签: vb.net wcf ssl iis

我陷入了一些我应该继续前进的事情,但它让我疯狂...... 我可以使用以下命令以编程方式更新自托管WCF服务的SSL证书信息:

Dim config As Microsoft.Web.Administration.Configuration = _
  serverManager.GetApplicationHostConfiguration
site.Bindings.Clear()
Dim binding = site.Bindings.Add(ipport, cert.GetCertHash, store.Name)
serverManager.CommitChanges()

并且还可以使用以:

开头的已知文件路径更改本地web.config的各个部分
Dim cfg As System.Configuration.Configuration = _
  System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(ConfigFileMap, target)

但是如果我尝试使用:

深入到system.webServer / security / access
Dim accessSection = cfg.GetSection("system.webServer/security")

我得到Nothing / null并且进一步挖掘有用地为“System.Configuration.IgnoreSection”部分生成了这个状态,这显然表明System.Configuration不想对那个特定部分玩得很好 - 即使它没有被拒绝在应用程序中访问我尽可能接近。

另一方面,如果我尝试使用Microsoft.Web.Administration,我只能弄清楚如何更改applicationHost.config,而不是本地web.config。

似乎唯一希望将客户端证书要求(sslFlags设置)放在本地web.config中的是IIS管理器(如果它位于applicationHost.config中,它也不会正确显示设置)< / p>

显然有各种各样的方法可以做到这一点,但我不敢相信没有一个简单的点网方式(除了编辑xml)。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

卫生署!!!显然我需要学习阅读手册(尽管MS并不容易)。

您可以这样做:

Using serverManager As New ServerManager
    Dim config As Microsoft.Web.Administration.Configuration = _
      serverManager.GetWebConfiguration("site name", "/application")
    Dim accessSection As Microsoft.Web.Administration.ConfigurationSection = _
      config.GetSection("system.webServer/security/access")
    accessSection("sslFlags") = "Ssl,SslRequireCert"
    serverManager.CommitChanges()
End Using

追溯显而易见的链接:Relevant StackOverflow Question