잊지 않겠습니다.

IIS Configuration

.NET Framework 2009. 10. 9. 15:22
IIS를 직접 제어해서 WebSite를 구성해주는 Setup 파일이라던지, 아니면 자신의 요구대로 IIS의 설정을 변경할 수 있는 방법을 제공

참고 : 
http://www.iis.net/ConfigReference

Microsoft.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;
          }
      }
Posted by Y2K
,