当前位置 主页 > iis相关 >

    C#如何管理控制iis7?

    栏目:iis相关 时间:2018-10-09 11:18

      把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从iis6到iis7的过渡中也和我存在同样的疑问,开始的时候我需要在IIS7下创建虚拟目录,用的是DirecotryEntry这个类,怎么也不能,总会报错[System.Runtime.InteropServices.COMException]{"未知错误(0x80005000)"}这个错误。
     
      第一步:找机子上安全方面的问题。我IIS7是装在Windowsserver2008上的。我取消了系统的UAC。并用“以管理员身份”运行的该程序。结果还是不行。
     
      第二步:在网上找有没有人跟我碰到相同的问题。果然!很多人都有,网上给的解决方案是:
     
      TheIISMetabaseandIIS6ConfigurationCompatibilityisnotautomaticallyinstalledwhenyouenabletheWebServerroleinWindows2008Server.Ifyouenablethisfeature,youroldDirectoryServicescodein.NETshouldworklikeitusedto.
     
      需要安装IIS6Metabase兼容性组件
     
      用了这种方案果然成功了!但事情并没有结束。
     
      第三步:找原因,为什么IIS7不能用这种方法!
     
      功夫不负有心人!
     
      IIS7是没有元数据的。哎~~这就是根本原因,大家可以到C:\WINDOWS\system32\inetsrv这个目录看看,IIS6的和IIS7的文件不同的。
     
      所以后来找到这种方法:
     
      请注意本文的内容均基于WindowsVistaBeta2版本,在正式的发布版本中可能会有所改变。
     
      Microsoft中提供了管理IIS7的一些非常强大的API——Microsoft.Web.Administration,可以很方便的让我们以编程的方式管理,设定IIS7的各项配置。Microsoft.Web.Administration.dll位于IIS的目录(%WinDir%\System32\InetSrv)下,在项目中添加对其的引用后您就可以使用这些API了。下图显示了Microsoft.Web.Administration.dll中的主要对象。
     
      让我们通过几个例子来使用Microsoft.Web.Administration,下面的例子均非常易懂,我就不再过多解释了。
     
      1、建立一个站点(Site)
     
      ServerManageriisManager=newServerManager();
     
      iisManager.Sites.Add("NewSite","http","*:8080:","d:\\MySite");
     
      iisManager.Update();
     
      2、将一个应用程序(Application)添加到一个站点
     
      ServerManageriisManager=newServerManager();
     
      iisManager.Sites["NewSite"].Applications.Add("/Sales","d:\\MyApp");
     
      iisManager.Update();
     
      3、建立一个虚拟目录(VirtualDirectory)
     
      ServerManageriisManager=newServerManager();
     
      Applicationapp=iisManager.Sites["NewSite"].Applications["/Sales"];
     
      app.VirtualDirectories.Add("/VDir","d:\\MyVDir");
     
      iisManager.Update();
     
      4、运行时控制:停止一个站点
     
      ServerManageriisManager=newServerManager();
     
      iisManager.Sites["NewSite"].Stop();
     
      5、运行时控制:回收应用程序池(RecycilinganApplicationPool)
     
      ServerManageriisManager=newServerManager();
     
      iisManager.ApplicationPools["DefaultAppPool"].Recycle();
     
      6、运行时控制:得到当前正在处理的请求
     
      ServerManageriisManager=newServerManager();
     
      foreach(WorkerProcessw3wpiniisManager.WorkerProcesses){
     
      Console.WriteLine("W3WP({0})",w3wp.ProcessId);
     
      foreach(Requestrequestinw3wp.GetRequests(0)){
     
      Console.WriteLine("{0}-{1},{2},{3}",
     
      request.Url,
     
      request.ClientIPAddr,
     
      request.TimeElapsed,
     
      request.TimeInState);
     
      }
     
      }
     
      还有一个有用之处是Microsoft.Web.Administration提供了对*.config(例如web.config)文件的编辑功能,让您再也不用像修改普通XML文件一样修改*.config了。