设为首页 收藏本站
查看: 1395|回复: 0

[经验分享] 笔记:操作IIS

[复制链接]

尚未签到

发表于 2015-8-13 14:42:36 | 显示全部楼层 |阅读模式
  前一段时间需要写一个小工具用于创建虚拟目录和设置注册表项,现在总结一下。有两种方式操作IIS:System.DirectoryServices空间下面的类,用于IIS5/6版本,和可以兼容iis6的IIS7版本;Microsoft.Web.Administration空间下面的类,IIS7引入的新的管理类。
  1.使用System.DirectoryServices操作IIS.
  《1》创建新站点



            string endPath = "IIS://localhost/W3SVC";   //注意字符串的最后没有/,否则将弹出异常
            DirectoryEntry dEntry=new DirectoryEntry(endPath);
            //创建一个站点
            int index = 0;
            foreach (DirectoryEntry item in dEntry.Children)
            {
                if(item.SchemaClassName=="IIsWebServer") //用于查找是否指定名称的website已存在               
                 {
                    if (item.Properties["ServerComment"][0].ToString() == "testCreate")//DirectoryEntry(IIsWebServer)的ServerComment属性指出站点的实际名称
                    {
                       dEntry.Children.Remove(item);//删除已经存在的站点
                       break;
                    }
                    if (int.Parse(item.Name) > index)  //DirectoryEntry(IIsWebServer0的Name属性表示的是一个int,IIS默认从1开始
                    {
                        index = int.Parse(item.Name);
                    }
                }
            }
            index++;
            DirectoryEntry newWebSite = null;
            newWebSite = dEntry.Children.Add(index.ToString(), "IIsWebServer");  //注意第二个参数
            newWebSite.Properties["ServerComment"][0] = "testCreate";      //设置站点名称
            newWebSite.Properties["ServerBindings"].Add("192.168.0.1:8080:");//设置站点的地址及端口号
            newWebSite.Invoke("Put","ServerState",2);//设置网站已启动状态
            newWebSite.CommitChanges();
  这个过程称为绑定,构造函数中的路径有一定的格式:



IIS://服务器名/操作的服务目录/站点标示/目录名称               --用于特定应用下目录
IIS://服务器名/操作的服务目录                              --得到IIS目录服务
  IIS://localhost/w3svc,表示IIS服务。它下面都有什么对象呢?IIsFilters,IIsApplicationPools,IIsWebInfo,IIsWebServer,它们都是DirectoryEntry.SchemalClassName的值。其中IIsWebServer表示站点目录。那么一个站点目录又包含哪些对象呢?IIsWebVirtualDir(Root),IIsFilters(FILTERS),IIsCertMapper(IIsCertMapper),IIsCertMapper(CERT11S),它们也同样是DirectoryEntry.SchemalClassName的值,()中的值是DirectoryEntry.Name的值。
  IIS服务用于管理站点,提供了ADSI(活动目录服务接口)。类似的还有LDAP服务,IIS服务和WinNT等等。
  服务器名可以是固定的IP,也可以是计算机名。这里使用的是本地(localhost)。
  W3SVC表示操作的是Web目录。
  通过这一步,我们创建了IIS服务对象s
  《2》为新站点创建主目录,每一个站点都要有一个主目录。



              //为新建的webSite创建根目录root
            DirectoryEntry root = newWebSite.Children.Add("Root", "IIsWebVirtualDir"); 注意第二个参数
            root.Properties["Path"][0] = @"C:\11111";
            root.Properties["AuthAnonymous"][0] = true;  //允许匿名访问
            root.Properties["AccessScript"][0] = true;  //执行脚本
            root.Properties["AccessRead"][0] = true;
            root.Properties["DefaultDoc"][0] = "default.aspx";
            root.Invoke("AppCreate", true);
            root.CommitChanges();
            dEntry.CommitChanges();
  《3》为新站点创建应用程序



            foreach(DirectoryEntry item in root.Children)   //检查是否存在AppDir的应用程序
{
if (item.SchemaClassName == "IIsWebVirtualDir" && item.Name=="AppDir")
{
root.Children.Remove(item);//删除
break;
}
}
DirectoryEntry appDir = root.Children.Add("AppDir", "IIsWebVirtualDir");  //注意第二个参数IIsWebVirtualDir.
appDir.Invoke("AppCreate", true);
appDir.Properties["Path"][0] = @"C:\Users\Administrator\Desktop\MyFolder";
appDir.Properties["AccessScript"][0] = true;
appDir.Properties["AccessRead"][0] = true;
appDir.CommitChanges();

  2.使用Microsoft.Web.Administration空间中的类,使用更加简洁而且易于理解。【注意:在使用Microsoft.Web.Administration时,应将Project的属性页面application选项卡中的TargetFramework更改为.net framework 4】。Microsoft.Web.Administration.dll在如下地址:%systemroot%\WINDOWS\system32\inetsrv.先看下面我使用的代码在默认站点下创建application。



        private void ManageIIS()
        {
           try
           {
            ServerManager sm = new ServerManager();  
            ApplicationPool newPool = sm.ApplicationPools["NewPool"];
            Configuration config = sm.GetApplicationHostConfiguration();
            if (newPool != null)
            {
                 sm.ApplicationPools.Remove(newPool);
            }
            newPool = sm.ApplicationPools.Add("NewPool");
            newPool.ManagedRuntimeVersion = "v4.0";
            newPool.ManagedPipelineMode = ManagedPipelineMode.Classic;
            //create application
            Site defaultSite = sm.Sites["Default Web Site"];
            Application newApplication = defaultSite.Applications["/NewApplication"];
            if (newApplication != null)
            {
                defaultSite.Applications.Remove(newApplication);  //delete this application
                config.RemoveLocationPath("Default Web Site/NewApplication"); //delete the node of the applicationHostConfig.config file with this application
            }
            newApplication = defaultSite.Applications.Add("/NewApplication",@"E:\PrismModule.Web");
            newApplication.ApplicationPoolName = "NewPool";
            //set the application attribute in the applicationHostConfig.config file.
            config = sm.GetApplicationHostConfiguration();
            string path = "system.webServer/directoryBrowse";//the attribue path in the applictionHostConfig.config file.
            ConfigurationSection dbS = config.GetSection(path, "Default Web Site/NewApplication");
            dbS.Attributes["enabled"].Value = true;
            dbS = config.GetSection("system.webServer/security/access", "Default Web Site/NewApplication");
            sm.CommitChanges();
          }
          catch (Exception e)
          {
             throw e;
           }   
        }
  代码比较简单,在写这段代码的时候碰到的主要问题是如何设置自己新建的application的属性。IIS7与其他版本的IIS区别是它将所有的配置信息(可读写,可执行script,匿名访问,目录浏览,默认页等)存储在各种.config文件,要想修改属性还需要了解各种config文件之间的关系。
  【引用MSDN:IIS 7.0 具有新的委派配置系统,它基于分布式 XML 配置文件的层次结构。此层次结构由全局 applicationHost.config 文件(该文件包含服务器级别的配置默认设置)以及应用程序的目录结构中的分布式 web.config 文件组成。这些文件与 ASP.NET 应用程序框架用于以可移植方式存储应用程序设置的 web.config 文件是相同的文件。因而可以使用干净和强大结构化的 XML 指令,并排地存储 IIS 和 ASP.NET 配置。】
  下面看看applicationHost.config文件的结构:
DSC0000.png
  在<configSections>节点中定义了3个sectionGroup节点,在sectionGroup中包含section。section定义了属性的name,attribute等。当需要设置新建application的属性时,就要查看name="system.webServer"下面列出的一些属性,如下图:
DSC0001.png
  如图中所示,列出了一些对应属性名称。每个节点的overrideModeDefault=”Deny|Allow"将决定此属性是否被锁定。Deny表示锁定,即不能在application对应文件夹中的web.config中修改。Allow则允许将此配置信息写到applicaiton问价夹对应的web.config中。IIS7.0默认允许在web.config中被修改的配置信息有4个:DefaultDocument(默认文档),Directory browseing(目录浏览),Http protocol,Http redirect。其它的均不能在web.config中修改。如果想修改,必须IIS管理员将相应的section中的overrideModeDefault设为Allow。或者你就是管理员,直接在applicationHost.config中设置。applicationHost.config文件中默认设置了可读,执行script(handlers节点中)。
  下面主要解释一下config配置信息代码:



Configuration config = sm.GetApplicationHostConfiguration();
string path = "system.webServer/directoryBrowse";//the attribue path in the applictionHostConfig.config file.
ConfigurationSection dbS = config.GetSection(path, "Default Web Site/NewApplication");
dbS.Attributes["enabled"].Value = true;
  这段代码将新建的NewApplication的目录浏览属性设置为true,并接结果保存在applicationHost.config文件中。              ServerManager.GetApplicationHostConfiguration()方法将得到applicationHost.config对象。
  根据上图中的system.webServer节点的结构关系,可以得到需要修改的属性路径:path="system.webServer/directoryBrowse";
  方法config.GetSection(path,"Default Web Site/NewApplication”),第一参数指出修改的片段,第二个参数指出这个修改将应用到那个server。应为新建的application在默认站点下面所有参数为:Default Web Site/NewApplication。
  dbS.Attributes[”enabled"].Value=true;即设置为可以目录浏览。当调用ServerManager.CommitChanges()后,将保存。结构是applicationHost.config文件中将多出一个如下的片段。
DSC0002.png
  另一个常用的属性SSL的设置和上面的类似,当设置”要求ssl"选项时,applicationhost.config文件中将产生如下变化:
DSC0003.jpg
  通过设置此属性,所有请求此application 内容的url请求都必须以”https"开头。
  应为Directory browsing默认是被允许在application文件夹的web.config文件修改的。因此,可以将此配置的修改保存在web.config文件中,这样可以轻松的用xcopy部署应用。方法基本相同,只是在获取Configuration类的使用应使用Application.GetWebConfiguration()获得一个实例对象。完整代码如下:



Configuration cFile = newApplication.GetWebConfiguration();
ConfigurationSection section = cFile.GetSection("system.webServer/directoryBrowse");
dbS.Attributes["enabled"].Value = true;
  一个别忘了调用ServerManager.CommitChanges()方法保存修改,这些修改将保存到web.config文件中。它也是在文件中添加了一段xml片段,如下:
DSC0004.png
  
  以上是自己学习时的过程,也可能有不对的地方。附上几篇参考的文章:
  http://www.make-awesome.com/2010/12/automating-iis7-setup-with-microsoft-web-administration/
  http://msdn.microsoft.com/zh-cn/magazine/cc163453.aspx
  http://www.soft-bin.com/html/2010/07/28/use_csharp_to_control_iis.html
  

  
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98573-1-1.html 上篇帖子: 如何在IIS里对网站限速 下篇帖子: win+IIS系统下如何设置二级域名可用(windows、IIS、二级域名)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表