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


利用IIS7自帶類庫管理IIS現在變的更強大更方便,而完全可以不需要用DirecotryEntry這個類了(網上很多.net管理iis6.0的文章都用到了DirecotryEntry這個類 ),Microsoft.Web.Administration.dll位於IIS的目錄(%WinDir%\\System32\\InetSrv)下,使用時需要引用,它基本上可以管理IIS7的各項配置。

這個類庫的主體結構如下:

 

主要調用code 如下:

  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方法。

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

后來在網上發下一個查詢屬性的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM