利用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;//最大工作进程数
                    }//创建SiteSite 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

C#操作IIS站点 Microsoft.Web.Administration.dll相关推荐

  1. IIS 7管理API——Microsoft.Web.Administration介绍

    本文翻译整理自Carlos Aguilar Mares的blog文章:Microsoft.Web.Administration in IIS 7. 请注意本文的内容均基于Windows Vista B ...

  2. C#操作IIS程序池及站点的创建配置(转)

    C#操作IIS程序池及站点的创建配置(转) 原文:http://www.cnblogs.com/wujy/archive/2013/02/28/2937667.html 最近在做一个WEB程序的安装包 ...

  3. C#中操作IIS 7.0

    C#中操作IIS 7.0 作者:Jaxu 出处:博客园  2009-3-26 10:17:52 阅读 53  次 <script type="text/javascript" ...

  4. 让Microsoft Web Application Stress Tool 支持非80端口的站点测试

    刚在做内网内某个项目的性能测试 项目部署的端口为4000 然后用Microsoft Web Application Stress Tool 测试 发现居然不支持非80端口 找遍整个配置界面没发现por ...

  5. 服务器08系统伪静态,win2003/2008服务器IIS站点安装设置伪静态的方法

    第一种方法:适用于win2008,IIS7以上 IIS7以上可以使用URL重写模块,并在根目录下通过 web.config 文件设置伪静态的方法,这个就不多说了,微软官方可以下载安装:http://w ...

  6. Microsoft Web Farm Framework (WFF) 2.0正式发布

    Microsoft Web Farm Framework (WFF) 2.0 是微软开发的.基于IIS 7.x的小插件,能够帮助我们轻松实现Web网站的高性能.高可用性,用来在Web服务器群上提供和管 ...

  7. Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer

    Microsoft Web 平台安装程序 3.0 (Web PI) 是一款免费的工具,使用它可以获得 Microsoft Web 平台的最新组件(包括 Internet Information Ser ...

  8. Net中如何操作IIS

    Net中实际上已经为我们在这方面做得很好了.FCL中提供了不少的类来帮助我们完成这项工作,让我们的开发工作变非常简单和快乐.编程控制IIS实际上很简单,和ASP一样,.Net中需要使用ADSI来操作I ...

  9. 解决访问被拒绝:Microsoft.Web.UI.WebControls的问题

    asp.net程序编译调试时偶尔出现访问被拒绝的错误 问题描述: 编写asp.net程序,当编译调试比较频繁的时候,很容易经常地 出现访问被拒绝.形如: 分析器错误信息: 访问被拒绝: "M ...

最新文章

  1. Kaggle竞赛中使用YoloV5将物体检测的性能翻倍的心路历程
  2. JUC并发编程八 并发架构--park,unpark
  3. ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略
  4. Android系统从驱动到上层服务再到应用的两种服务架构方式
  5. FAILED: Error in metadata: MetaException(message:Got exception: java.net.ConnectException
  6. 数据库---主键约束
  7. Android之用sharedUserId来实现不同应用(APK)数据共享
  8. 面试又栽在JVM上了!
  9. leetcode - 740. 删除与获得点数
  10. Java 算法 FBI树
  11. 《设计模式详解》手写简单的 Spring 框架
  12. 在centos 6.5下安装svn (Subversion)
  13. 利用.htaccess绑定域名到子目录
  14. python语言能做什么-python语言可以干什么
  15. python核心编程课后习题解答第三章
  16. [Xilinx FPGA] #2 Xilinx ISE Help Notes #1 -1.8.2019
  17. 笔记本插入耳机声音外放问题解决方式—1
  18. PyCharm入门教程——多个插入符号
  19. 英语学习、常用疑问句型,否定句
  20. 微信小程序语音搜索功能

热门文章

  1. JEECG微云快速开发平台
  2. Java内存回收机制基础[转]
  3. mac上mysql8.0以tar.gz方式手动安装
  4. 九章算法【总结】Java 搞定链表-面试常考题目精选
  5. 10.1.5 布局优化利器之 Hierarchy Viewer
  6. openlayers2中selectcontrol用法
  7. 程序文档的重要性理解
  8. jQuery学习笔记(Ajax)
  9. HB限时领Deponia: The Complete Journey
  10. FreeMarker对应各种数据结构解析