簡體   English   中英

使用C#在IIS7中以編程方式設置“連接為”用戶

[英]Programmatically setting the 'Connect as' user in IIS7 using C#

我正在嘗試使用下面的代碼片段執行此操作,但是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";

編輯:因此,當我對這個問題ating了幾天后盯着這個問題時,我發現您可以在以下上下文中使用ServerManager來完成此任務。

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

因此,當我對這個問題this了幾天之后一直盯着這個問題時,顯然您可以在以下情況下使用Servermanager來完成此任務。

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

VirtualDirectoryDe​​faults上設置用戶名和密碼可能不會產生您想要的結果。 取而代之的是,您可能希望在此站點對象中定位路徑為根的應用程序(因此查詢中的.Path.Equals(“ /”)過濾器),然后修改該應用程序的虛擬目錄用戶名和密碼。

這可以通過以下方法來完成(請注意:該方法假定您已經通過ServerManagers Sites集合上的搜索找到了所需的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
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM