C#操做IIS站點 Microsoft.Web.Administration.dll

利用IIS7自帶類庫管理IIS如今變的更強大更方便,而徹底能夠不須要用DirecotryEntry這個類了(網上不少.net管理iis6.0的文章都用到了DirecotryEntry這個類 ),Microsoft.Web.Administration.dll位於IIS的目錄(%WinDir%\\System32\\InetSrv)下,使用時須要引用,它基本上能夠管理IIS7的各項配置。html

這個類庫的主體結構以下:web

 

主要調用code 以下:api

  using (ServerManager sm = ServerManager.OpenRemote("192.168.0.129"))
            {
                //建立站點
                sm.Sites.Add("test", @"D:\DataBackup", 9898);
                //建立應用程序池
                sm.ApplicationPools.Add("test");
                //設置站點的應用程序池
                sm.Sites["test"].Applications[0].ApplicationPoolName = "test";
                sm.CommitChanges();
            }
  void CreateIISSite(string serverIP, string webName, int port, string path)
        {
            try
            {
                using (ServerManager sm = ServerManager.OpenRemote(serverIP))
                {
                    //建立應用程序池
                    ApplicationPool appPool = sm.ApplicationPools.FirstOrDefault(x => x.Name == webName);
                    if (appPool == null)
                    {
                        appPool = sm.ApplicationPools.Add(webName);
                        appPool.AutoStart = false;

                        appPool.QueueLength = 10000;
                        appPool.StartMode = StartMode.AlwaysRunning;//啓動模式
                        appPool.Recycling.PeriodicRestart.Time = new TimeSpan();//回收時間間隔
                        appPool.ProcessModel.IdleTimeout = new TimeSpan();//閒置超時
                        appPool.ProcessModel.MaxProcesses = 1;//最大工做進程數
                    }
                    //建立Site
                    Site site = sm.Sites.FirstOrDefault(x => x.Name == webName);
                    if (site == null)
                    {
                        site = sm.Sites.Add(webName, path, port);
                        site.ServerAutoStart = true;
                                        
                        site.Bindings[0].EndPoint.Port = port;
                        Application root = site.Applications["/"];
                        root.ApplicationPoolName = webName;
                        root.VirtualDirectories["/"].PhysicalPath = path;
                        root.SetAttributeValue("preloadEnabled", true); /*預加載*/
                    }
                    sm.CommitChanges();
                }

            }
            catch (Exception ex)
            {
                ExceptionUtil.Throw(ex);
            }

        }

檢查 計算機 是否安裝有IIS   var service = ServiceController.GetServices(serverIp).FirstOrDefault(x => x.ServiceName == "W3SVC");併發

有關IIS預加載 你們能夠參考:預加載會執行Application_Start方法。app

IIS初始化(預加載),解決第一次訪問慢,程序池被回收問題
IIS預編譯提高加載速度ide

後來在網上發下一個查詢屬性的code 不錯,先copy過來網站

 Microsoft.Web.Administration.ServerManager sm = new Microsoft.Web.Administration.ServerManager();

            System.Console.WriteLine("應用程序池默認設置:");
            System.Console.WriteLine("\t常規:");
            System.Console.WriteLine("\t\t.NET Framework 版本:{0}", sm.ApplicationPoolDefaults.ManagedRuntimeVersion);
            System.Console.WriteLine("\t\t隊列長度:{0}", sm.ApplicationPoolDefaults.QueueLength);
            System.Console.WriteLine("\t\t託管管道模式:{0}", sm.ApplicationPoolDefaults.ManagedPipelineMode.ToString());
            System.Console.WriteLine("\t\t自動啓動:{0}", sm.ApplicationPoolDefaults.AutoStart);

            System.Console.WriteLine("\tCPU:");
            System.Console.WriteLine("\t\t處理器關聯掩碼:{0}", sm.ApplicationPoolDefaults.Cpu.SmpProcessorAffinityMask);
            System.Console.WriteLine("\t\t限制:{0}", sm.ApplicationPoolDefaults.Cpu.Limit);
            System.Console.WriteLine("\t\t限制操做:{0}", sm.ApplicationPoolDefaults.Cpu.Action.ToString());
            System.Console.WriteLine("\t\t限制間隔(分鐘):{0}", sm.ApplicationPoolDefaults.Cpu.ResetInterval.TotalMinutes);
            System.Console.WriteLine("\t\t已啓用處理器關聯:{0}", sm.ApplicationPoolDefaults.Cpu.SmpAffinitized);

            System.Console.WriteLine("\t回收:");
            System.Console.WriteLine("\t\t發生配置更改時禁止回收:{0}", sm.ApplicationPoolDefaults.Recycling.DisallowRotationOnConfigChange);
            System.Console.WriteLine("\t\t固定時間間隔(分鐘):{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Time.TotalMinutes);
            System.Console.WriteLine("\t\t禁用重疊回收:{0}", sm.ApplicationPoolDefaults.Recycling.DisallowOverlappingRotation);
            System.Console.WriteLine("\t\t請求限制:{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Requests);
            System.Console.WriteLine("\t\t虛擬內存限制(KB):{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Memory);
            System.Console.WriteLine("\t\t專用內存限制(KB):{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.PrivateMemory);
            System.Console.WriteLine("\t\t特定時間:{0}", sm.ApplicationPoolDefaults.Recycling.PeriodicRestart.Schedule.ToString());
            System.Console.WriteLine("\t\t生成回收事件日誌條目:{0}", sm.ApplicationPoolDefaults.Recycling.LogEventOnRecycle.ToString());

            System.Console.WriteLine("\t進程孤立:");
            System.Console.WriteLine("\t\t可執行文件:{0}", sm.ApplicationPoolDefaults.Failure.OrphanActionExe);
            System.Console.WriteLine("\t\t可執行文件參數:{0}", sm.ApplicationPoolDefaults.Failure.OrphanActionParams);
            System.Console.WriteLine("\t\t已啓用:{0}", sm.ApplicationPoolDefaults.Failure.OrphanWorkerProcess);

            System.Console.WriteLine("\t進程模型:");
            System.Console.WriteLine("\t\tPing 間隔(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.PingInterval.TotalSeconds);
            System.Console.WriteLine("\t\tPing 最大響應時間(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.PingResponseTime.TotalSeconds);
            System.Console.WriteLine("\t\t標識:{0}", sm.ApplicationPoolDefaults.ProcessModel.IdentityType);
            System.Console.WriteLine("\t\t用戶名:{0}", sm.ApplicationPoolDefaults.ProcessModel.UserName);
            System.Console.WriteLine("\t\t密碼:{0}", sm.ApplicationPoolDefaults.ProcessModel.Password);
            System.Console.WriteLine("\t\t關閉時間限制(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.ShutdownTimeLimit.TotalSeconds);
            System.Console.WriteLine("\t\t加載用戶配置文件:{0}", sm.ApplicationPoolDefaults.ProcessModel.LoadUserProfile);
            System.Console.WriteLine("\t\t啓動時間限制(秒):{0}", sm.ApplicationPoolDefaults.ProcessModel.StartupTimeLimit.TotalSeconds);
            System.Console.WriteLine("\t\t容許 Ping:{0}", sm.ApplicationPoolDefaults.ProcessModel.PingingEnabled);
            System.Console.WriteLine("\t\t閒置超時(分鐘):{0}", sm.ApplicationPoolDefaults.ProcessModel.IdleTimeout.TotalMinutes);
            System.Console.WriteLine("\t\t最大工做進程數:{0}", sm.ApplicationPoolDefaults.ProcessModel.MaxProcesses);

            System.Console.WriteLine("\t快速故障防禦:");
            System.Console.WriteLine("\t\t「服務不可用」響應類型:{0}", sm.ApplicationPoolDefaults.Failure.LoadBalancerCapabilities.ToString());
            System.Console.WriteLine("\t\t故障間隔(分鐘):{0}", sm.ApplicationPoolDefaults.Failure.RapidFailProtectionInterval.TotalMinutes);
            System.Console.WriteLine("\t\t關閉可執行文件:{0}", sm.ApplicationPoolDefaults.Failure.AutoShutdownExe);
            System.Console.WriteLine("\t\t關閉可執行文件參數:{0}", sm.ApplicationPoolDefaults.Failure.AutoShutdownParams);
            System.Console.WriteLine("\t\t已啓用:{0}", sm.ApplicationPoolDefaults.Failure.RapidFailProtection);
            System.Console.WriteLine("\t\t最大故障數:{0}", sm.ApplicationPoolDefaults.Failure.RapidFailProtectionMaxCrashes);
            System.Console.WriteLine("\t\t容許32位應用程序運行在64位 Windows 上:{0}", sm.ApplicationPoolDefaults.Enable32BitAppOnWin64);

            System.Console.WriteLine();
            System.Console.WriteLine("網站默認設置:");
            System.Console.WriteLine("\t常規:");
            System.Console.WriteLine("\t\t物理路徑憑據:UserName={0}, Password={1}", sm.VirtualDirectoryDefaults.UserName, sm.VirtualDirectoryDefaults.Password);
            System.Console.WriteLine("\t\t物理路徑憑據登陸類型:{0}", sm.VirtualDirectoryDefaults.LogonMethod.ToString());
            System.Console.WriteLine("\t\t應用程序池:{0}", sm.ApplicationDefaults.ApplicationPoolName);
            System.Console.WriteLine("\t\t自動啓動:{0}", sm.SiteDefaults.ServerAutoStart);
            System.Console.WriteLine("\t行爲:");
            System.Console.WriteLine("\t\t鏈接限制:");
            System.Console.WriteLine("\t\t\t鏈接超時(秒):{0}", sm.SiteDefaults.Limits.ConnectionTimeout.TotalSeconds);
            System.Console.WriteLine("\t\t\t最大併發鏈接數:{0}", sm.SiteDefaults.Limits.MaxConnections);
            System.Console.WriteLine("\t\t\t最大帶寬(字節/秒):{0}", sm.SiteDefaults.Limits.MaxBandwidth);
            System.Console.WriteLine("\t\t失敗請求跟蹤:");
            System.Console.WriteLine("\t\t\t跟蹤文件的最大數量:{0}", sm.SiteDefaults.TraceFailedRequestsLogging.MaxLogFiles);
            System.Console.WriteLine("\t\t\t目錄:{0}", sm.SiteDefaults.TraceFailedRequestsLogging.Directory);
            System.Console.WriteLine("\t\t\t已啓用:{0}", sm.SiteDefaults.TraceFailedRequestsLogging.Enabled);
            System.Console.WriteLine("\t\t已啓用的協議:{0}", sm.ApplicationDefaults.EnabledProtocols);

            foreach (var s in sm.Sites)//遍歷網站
            {
                System.Console.WriteLine();
                System.Console.WriteLine("模式名:{0}", s.Schema.Name);
                System.Console.WriteLine("編號:{0}", s.Id);
                System.Console.WriteLine("網站名稱:{0}", s.Name);
                System.Console.WriteLine("物理路徑:{0}", s.Applications["/"].VirtualDirectories["/"].PhysicalPath);
                System.Console.WriteLine("物理路徑憑據:{0}", s.Methods.ToString());
                System.Console.WriteLine("應用程序池:{0}", s.Applications["/"].ApplicationPoolName);
                System.Console.WriteLine("已啓用的協議:{0}", s.Applications["/"].EnabledProtocols);
                System.Console.WriteLine("自動啓動:{0}", s.ServerAutoStart);
                System.Console.WriteLine("運行狀態:{0}", s.State.ToString());

                System.Console.WriteLine("網站綁定:");
                foreach (var tmp in s.Bindings)
                {
                    System.Console.WriteLine("\t類型:{0}", tmp.Protocol);
                    System.Console.WriteLine("\tIP 地址:{0}", tmp.EndPoint.Address.ToString());
                    System.Console.WriteLine("\t端口:{0}", tmp.EndPoint.Port.ToString());
                    System.Console.WriteLine("\t主機名:{0}", tmp.Host);
                    //System.Console.WriteLine(tmp.BindingInformation);
                    //System.Console.WriteLine(tmp.CertificateStoreName);
                    //System.Console.WriteLine(tmp.IsIPPortHostBinding);
                    //System.Console.WriteLine(tmp.IsLocallyStored);
                    //System.Console.WriteLine(tmp.UseDsMapper);
                }

                System.Console.WriteLine("鏈接限制:");
                System.Console.WriteLine("\t鏈接超時(秒):{0}", s.Limits.ConnectionTimeout.TotalSeconds);
                System.Console.WriteLine("\t最大併發鏈接數:{0}", s.Limits.MaxConnections);
                System.Console.WriteLine("\t最大帶寬(字節/秒):{0}", s.Limits.MaxBandwidth);

                System.Console.WriteLine("失敗請求跟蹤:");
                System.Console.WriteLine("\t跟蹤文件的最大數量:{0}", s.TraceFailedRequestsLogging.MaxLogFiles);
                System.Console.WriteLine("\t目錄:{0}", s.TraceFailedRequestsLogging.Directory);
                System.Console.WriteLine("\t已啓用:{0}", s.TraceFailedRequestsLogging.Enabled);

                System.Console.WriteLine("日誌:");
                //System.Console.WriteLine("\t啓用日誌服務:{0}", s.LogFile.Enabled);
                System.Console.WriteLine("\t格式:{0}", s.LogFile.LogFormat.ToString());
                System.Console.WriteLine("\t目錄:{0}", s.LogFile.Directory);
                System.Console.WriteLine("\t文件包含字段:{0}", s.LogFile.LogExtFileFlags.ToString());
                System.Console.WriteLine("\t計劃:{0}", s.LogFile.Period.ToString());
                System.Console.WriteLine("\t最大文件大小(字節):{0}", s.LogFile.TruncateSize);
                System.Console.WriteLine("\t使用本地時間進行文件命名和滾動更新:{0}", s.LogFile.LocalTimeRollover);

                System.Console.WriteLine("----應用程序的默認應用程序池:{0}", s.ApplicationDefaults.ApplicationPoolName);
                System.Console.WriteLine("----應用程序的默認已啓用的協議:{0}", s.ApplicationDefaults.EnabledProtocols);
                //System.Console.WriteLine("----應用程序的默認物理路徑憑據:{0}", s.ApplicationDefaults.Methods.ToString());
                //System.Console.WriteLine("----虛擬目錄的默認物理路徑憑據:{0}", s.VirtualDirectoryDefaults.Methods.ToString());
                System.Console.WriteLine("----虛擬目錄的默認物理路徑憑據登陸類型:{0}", s.VirtualDirectoryDefaults.LogonMethod.ToString());
                System.Console.WriteLine("----虛擬目錄的默認用戶名:{0}", s.VirtualDirectoryDefaults.UserName);
                System.Console.WriteLine("----虛擬目錄的默認用戶密碼:{0}", s.VirtualDirectoryDefaults.Password);
                System.Console.WriteLine("應用程序 列表:");
                foreach (var tmp in s.Applications)
                {
                    if (tmp.Path != "/")
                    {
                        System.Console.WriteLine("\t模式名:{0}", tmp.Schema.Name);
                        System.Console.WriteLine("\t虛擬路徑:{0}", tmp.Path);
                        System.Console.WriteLine("\t物理路徑:{0}", tmp.VirtualDirectories["/"].PhysicalPath);
                        //System.Console.WriteLine("\t物理路徑憑據:{0}", tmp.Methods.ToString());
                        System.Console.WriteLine("\t應用程序池:{0}", tmp.ApplicationPoolName);
                        System.Console.WriteLine("\t已啓用的協議:{0}", tmp.EnabledProtocols);
                    }
                    System.Console.WriteLine("\t虛擬目錄 列表:");
                    foreach (var tmp2 in tmp.VirtualDirectories)
                    {
                        if (tmp2.Path != "/")
                        {
                            System.Console.WriteLine("\t\t模式名:{0}", tmp2.Schema.Name);
                            System.Console.WriteLine("\t\t虛擬路徑:{0}", tmp2.Path);
                            System.Console.WriteLine("\t\t物理路徑:{0}", tmp2.PhysicalPath);
                            //System.Console.WriteLine("\t\t物理路徑憑據:{0}", tmp2.Methods.ToString());
                            System.Console.WriteLine("\t\t物理路徑憑據登陸類型:{0}", tmp2.LogonMethod.ToString());
                        }
                    }
                }
            }
View Code
相關文章
相關標籤/搜索