我尝试使用以下代码段尝试执行此操作,但FindElement一直给出错误,表明它在当前上下文中不存在。最终,我尝试做的是设置网站在连接区域中使用的用户名和密码。这与假冒用户不同。
using Microsoft.Web.Administration;
using Microsoft.Web.Management;
using Microsoft.Web.Media.TransformManager.Common;
using Microsoft.Web.Media.TransformManager;
using System.Web.Configuration;
using System.Collections;
Configuration config = iisManager.GetApplicationHostConfiguration();
ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
ConfigurationElementCollection applicationCollection = siteElement.GetCollection();
ConfigurationElement applicationElement = FindElement(applicationCollection, "application", "path", @"/MyNewVirtualDir");
ConfigurationElementCollection virtualDirCollection = applicationElement.GetCollection();
ConfigurationElement virtualDirElement = FindElement(virtualDirCollection, "virtualDirectory", "path", @"/");
virtualDirElement.Attributes["userName"].Value = "MYDOMAIN\\MyUser";
virtualDirElement.Attributes["password"].Value = "MyPassword";
编辑:因为我在几天之后对这个问题嗤之以鼻,我发现你可以在以下环境中使用ServerManager完成这个任务。
ServerManager iisManager = new ServerManager()
site = iisManager.Sites.FirstOrDefault(a => a.Name.Contains("Default"));
site.VirtualDirectoryDefaults.Password = tbImpersonatorPassword.Text;
site.VirtualDirectoryDefaults.UserName = tbImpersonatorUser.Text;
答案 0 :(得分:1)
所以当我在几天之后对这个问题进行抨击之后我正盯着这个问题,显然你可以在下面的环境中使用Servermanager完成这个任务。
ServerManager iisManager = new ServerManager()
site = iisManager.Sites.FirstOrDefault(a => a.Name.Contains("Default"));
site.VirtualDirectoryDefaults.Password = tbImpersonatorPassword.Text;
site.VirtualDirectoryDefaults.UserName = tbImpersonatorUser.Text;
答案 1 :(得分:0)
在 VirtualDirectoryDefaults 上设置用户名和密码可能不会产生您想要的结果。取而代之的是,您可能希望在此站点对象中定位路径为根的应用程序(因此在查询中使用.Path.Equals(“ /”)筛选器),然后修改该应用程序的虚拟目录用户名和密码。
这可以通过以下方法完成(请注意:此方法假定您已经通过在ServerManagers Site 集合上进行搜索找到了所需的站点,并且正在将该Site对象传递给此方法)。完成操作后,请确保处置 ServerManager 对象,以避免内存泄漏。
public static void SetConnectAsAccount(Site site, string username, string password)
{
if (site == null)
{
throw new ArgumentNullException("site");
}
if (string.IsNullOrWhiteSpace(username))
{
throw new ArgumentNullException("username");
}
if (string.IsNullOrWhiteSpace(password))
{
throw new ArgumentNullException("password");
}
foreach (var app in site.Applications.Where(c => c.Path.Equals("/")))
{
try
{
// set the Connect-As Accounts login credentials to the Service Acount
var appVirDir = app.VirtualDirectories.Where(c => c.Path.Equals("/")).FirstOrDefault();
if (appVirDir != null)
{
appVirDir.UserName = username;
appVirDir.Password = password;
}
}
catch (Exception ex)
{
// log your exception somewhere so you know what went wrong
}
}
}