IIS를 직접 제어해서 WebSite를 구성해주는 Setup 파일이라던지, 아니면 자신의 요구대로 IIS의 설정을 변경할 수 있는 방법을 제공
참고 :
http://www.iis.net/ConfigReferenceMicrosoft.Web.Administration를 사용하면 IIS 7.0에서부터 사용되는 모든 설정의 Config를 변경시킬 수 있다. 기본적으로 복사되는 Machine.config의 세부 설정을 변경시켜줄 수 있게 된다. 간단히 Wrapping시킨 IisSite class의 코드는 다음과 같다.
public class IisSite { public string SiteName { get; private set; } public string LastErrorMessage { get; private set; } public IisSite(string siteName) { SiteName = siteName; } public bool AddApplication(string applicationPool, string applicationName, string path) { try { using (ServerManager mgr = new ServerManager()) { Site site = mgr.Sites[SiteName]; if (site != null) { string appName; if(applicationName.StartsWith("/")) { appName = applicationName; } else { appName = "/" + applicationName; } site.Applications.Add(appName, path); Application app = site.Applications[appName]; app.ApplicationPoolName = applicationPool; mgr.CommitChanges(); } return true; } } catch(Exception ex) { LastErrorMessage = ex.StackTrace; return false; } } public bool SetAuthicationForAnonymous(string applicationName, bool enable) { return SetAuthicationEnable(applicationName, IisConfigConstant.AnonymousAuth, enable); } public bool SetAuthicationForBasic(string applicationName, bool enable) { return SetAuthicationEnable(applicationName, IisConfigConstant.BasicAuth, enable); } private bool SetAuthicationEnable(string applicationName, string authType, bool enable) { try { string appPath = string.Format("{0}/{1}", SiteName, applicationName); using (ServerManager mgr = new ServerManager()) { Configuration config = mgr.GetApplicationHostConfiguration(); ConfigurationSection basicAuthenticationSection = config.GetSection(authType, appPath); basicAuthenticationSection[IisConfigConstant.Enabled] = enable; mgr.CommitChanges(); return true; } } catch(Exception ex) { LastErrorMessage = ex.Message; return false; } } public bool SetDefaultDomainForBasic(string applicationName, string defaultDomain) { return SetAuthDefaultDomain(applicationName, IisConfigConstant.BasicAuth, defaultDomain); } private bool SetAuthDefaultDomain(string applicationName, string authType, string defaultDomainName) { try { using (ServerManager mgr = new ServerManager()) { string appPath = string.Format("{0}/{1}", SiteName, applicationName); //NOTE : Set Auth Configuration config = mgr.GetApplicationHostConfiguration(); ConfigurationSection basicAuthenticationSection = config.GetSection(authType, appPath); basicAuthenticationSection[IisConfigConstant.DefaultDomain] = defaultDomainName; mgr.CommitChanges(); return true; } } catch(Exception ex) { LastErrorMessage = ex.Message; return false; } }