把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从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了。