Программируя установку пользователя "Подключиться как" в IIS7 с помощью С#

Я пытаюсь сделать это, используя следующий фрагмент кода, но 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";

EDIT: так как я смотрел на вопрос после того, как несколько дней избивал себе голову против этого, я обнаружил, что вы можете выполнить это с помощью ServerManager в следующем контексте.

ServerManager iisManager = new ServerManager()
 site = iisManager.Sites.FirstOrDefault(a => a.Name.Contains("Default"));
 site.VirtualDirectoryDefaults.Password = tbImpersonatorPassword.Text;
 site.VirtualDirectoryDefaults.UserName = tbImpersonatorUser.Text;
2 ответа

Так что, когда я смотрел на вопрос, после того, как несколько дней бил головой об этом, и, видимо, вы можете это сделать с помощью Servermanager в следующем контексте.

ServerManager iisManager = new ServerManager()
 site = iisManager.Sites.FirstOrDefault(a => a.Name.Contains("Default"));
 site.VirtualDirectoryDefaults.Password = tbImpersonatorPassword.Text;
 site.VirtualDirectoryDefaults.UserName = tbImpersonatorUser.Text;


Установка имени пользователя и пароля в VirtualDirectoryDefaults может не дать результатов, которые вы ищете. Вместо этого вы можете захотеть найти приложение в этом объекте сайта, чей путь является корнем (отсюда и фильтр.Path.Equals("/") в запросе), а затем изменить имя пользователя и пароль для виртуального каталога приложений.

Это может быть выполнено с помощью следующего метода (Обратите внимание: этот метод предполагает, что вы уже нашли нужный сайт с помощью поиска в коллекции SitesManagers Sites и передаете этот объект 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
 }
 }
 }

licensed under cc by-sa 3.0 with attribution.