首页 > 网站 > IIS > 正文

C#如何管理控制iis7?

2024-08-29 03:10:50
字体:
来源:转载
供稿:网友
  把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从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了。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表