把在找到正確方法前遇到的挫折也拿出來與大家分享,相信不少朋友從iis6到iis7的過渡中也和我存在同樣的疑問,開始的時(shí)候我需要在IIS7下創(chuàng)建虛擬目錄,用的是DirecotryEntry這個(gè)類,怎么也不能,總會(huì)報(bào)錯(cuò)[System.Runtime.InteropServices.COMException]{"未知錯(cuò)誤(0x80005000)"}這個(gè)錯(cuò)誤。

第一步:找機(jī)子上安全方面的問題。我IIS7是裝在Windowsserver2008上的。我取消了系統(tǒng)的UAC。并用“以管理員身份”運(yùn)行的該程序。結(jié)果還是不行。
第二步:在網(wǎng)上找有沒有人跟我碰到相同的問題。果然!很多人都有,網(wǎng)上給的解決方案是:
TheIISMetabaseandIIS6ConfigurationCompatibilityisnotautomaticallyinstalledwhenyouenabletheWebServerroleinWindows2008Server.Ifyouenablethisfeature,youroldDirectoryServicescodein.NETshouldworklikeitusedto.
需要安裝IIS6Metabase兼容性組件
用了這種方案果然成功了!但事情并沒有結(jié)束。
第三步:找原因,為什么IIS7不能用這種方法!
功夫不負(fù)有心人!
IIS7是沒有元數(shù)據(jù)的。哎~~這就是根本原因,大家可以到C:/WINDOWS/system32/inetsrv這個(gè)目錄看看,IIS6的和IIS7的文件不同的。
所以后來找到這種方法:
請(qǐng)注意本文的內(nèi)容均基于WindowsVistaBeta2版本,在正式的發(fā)布版本中可能會(huì)有所改變。
Microsoft中提供了管理IIS7的一些非常強(qiáng)大的API——Microsoft.Web.Administration,可以很方便的讓我們以編程的方式管理,設(shè)定IIS7的各項(xiàng)配置。Microsoft.Web.Administration.dll位于IIS的目錄(%WinDir%/System32/InetSrv)下,在項(xiàng)目中添加對(duì)其的引用后您就可以使用這些API了。下圖顯示了Microsoft.Web.Administration.dll中的主要對(duì)象。

讓我們通過幾個(gè)例子來使用Microsoft.Web.Administration,下面的例子均非常易懂,我就不再過多解釋了。
1、建立一個(gè)站點(diǎn)(Site)
ServerManageriisManager=newServerManager();
iisManager.Sites.Add("NewSite","http","*:8080:","d://MySite");
iisManager.Update();
2、將一個(gè)應(yīng)用程序(Application)添加到一個(gè)站點(diǎn)
ServerManageriisManager=newServerManager();
iisManager.Sites["NewSite"].Applications.Add("/Sales","d://MyApp");
iisManager.Update();
3、建立一個(gè)虛擬目錄(VirtualDirectory)
ServerManageriisManager=newServerManager();
Applicationapp=iisManager.Sites["NewSite"].Applications["/Sales"];
app.VirtualDirectories.Add("/VDir","d://MyVDir");
iisManager.Update();
4、運(yùn)行時(shí)控制:停止一個(gè)站點(diǎn)
ServerManageriisManager=newServerManager();
iisManager.Sites["NewSite"].Stop();
5、運(yùn)行時(shí)控制:回收應(yīng)用程序池(RecycilinganApplicationPool)
ServerManageriisManager=newServerManager();
iisManager.ApplicationPools["DefaultAppPool"].Recycle();
6、運(yùn)行時(shí)控制:得到當(dāng)前正在處理的請(qǐng)求
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);
}
}
還有一個(gè)有用之處是Microsoft.Web.Administration提供了對(duì)*.config(例如web.config)文件的編輯功能,讓您再也不用像修改普通XML文件一樣修改*.config了。