【问题标题】:IIS using Microsoft.Web.Administration and commiting changesIIS 使用 Microsoft.Web.Administration 并提交更改
【发布时间】:2018-02-04 00:18:25
【问题描述】:

目标
根据每个请求更改 IIS 绑定和交换虚拟目录。一个简单的应用程序将使用Microsoft.Web.Administration 打开、替换和提交。以下是一个简化的流程:

代码

ServerManager = New ServerManager()
config = ServerManager.GetApplicationHostConfiguration()
SiteList = config.GetSection("system.applicationHost/sites")
SitesCollection = SiteList.GetCollection()
_site = SitesCollection.FirstOrDefault(Function(f) f.GetAttributeValue("name").ToString() = "XXX")
_bindings = _site.GetCollection("bindings")
_bind As ConfigurationElement = _bindings.CreateElement("binding")
_bind("protocol") = "http"
_bind("bindingInformation") = String.Format("*:80:{0}", "www.zzz.yyy")
_bindings.Add(_bind)
ServerManager.CommitChanges()

问题
此代码在经过管理员身份验证的网页上运行,在调用之前,会模拟线程以确保权限到位。我可以阅读 .config 但不能写!我还确认,在任何呼叫之前,该线程都以管理员身份运行。我也尝试使用 LocalService 池,但同样没有运气。

错误

Filename: \\?\C:\Windows\system32\inetsrv\config\applicationHost.config
Error: Cannot write configuration file due to insufficient permissions
hresult: 0x80070005
at Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.CommitChanges()

【问题讨论】:

  • 线程模拟没用。 LocalService 不是本地管理员。您必须以 LocalSystem 作为身份在池中运行。
  • 尝试了以上所有方法,包括使用 LocalSystem 身份池。

标签: asp.net iis iis-7 windows-server-2008-r2


【解决方案1】:

经过一些检查和实验,我发现让它工作的方法是

  • 不要在应用程序上使用身份验证。
  • 请勿冒充。
  • Lo​​calService 不起作用。
  • 在具有足够权限的池上运行它(管理员)

看起来使用模拟再次破坏了它。

这不是我想要的设置,但我认为我可以生存并将应用程序移到这个不安全的池中,进行更改并将其移回通用 ApplicationPoolIdentity。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多