Net 中實際上已經為我們在這方面做得很好了
FCL中提供了不少的類來幫助我們完成這項工作
讓我們的開發工作變非常簡單和快樂
編程控制IIS實際上很簡單
和ASP一樣
Net中需要使用ADSI來操作IIS
但是此時我們不再需要GetObject這個東東了
因為
Net為我們提供了更加強大功能的新東東
System
DirectoryServices命名空間中包括了些強大的東東
DirectoryEntry
DirectoryEntries
它們為我們提供了訪問活動目錄的強大功能
在這些類允許我們操作IIS
LDAP
NDS以及WinNT
功能很強大的吧
)
不過我們此處只談IIS的控制
一般來說
我們操作IIS一般都是對虛擬目錄的操作
因此我將此列為主要的內容來講
首先我們要搞清楚IIS的層次結構的問題
下面是我從國外找來的一張圖
很好的解釋了IIS的層次結構
為了搞清楚IIS的控制語法
我們就必須搞清上圖
了解IIS元數據(Metabase)的層次結構
圖中的每一個節點稱之Key
而每個Key可以包含一個或多個值
這些值就是我們說的屬性 (properties)
IIS元數據中的Key與IIS中的元素是相符的
因此元數據中的屬性值的設定是會影響IIS中的設置
這就是我們編程的基本思路和核心
另外還要了解一下Schema這個概念
它表示IIS中構架的名稱
即可以理解IIS元數據中Key的類型
具體點說就是指每個結點的類型
我們知道
IIS中有虛擬目錄
普通目錄
以及文件這些東東
而這些都屬於IIS的元素
區分的他們的標幟就是Schema
比如虛擬目錄的Schema就是
IIsVirtualDir
普通目錄就是
IIsWebDir
這樣我們添加
刪除目錄時
IIS就知道我們添加的是虛擬目錄還是普通目錄
創建虛擬目錄
DirectoryEntry是
Net給我們的一大禮物
他的名字我們就知道他的功能
目錄入口
使用過ADSI的人都知道操作IIS
WinNT這些時
我們還需要提供他們的Path
操作IIS時
這個Path的格式為
IIS://ComputerName/Service/Website/Directory
ComputerName:即操作的服務器的名字
可以是名字也可以是IP
經常用的就是localhost
Service:即操作的服務器
IIS中有Web
也有FTP
還有SMTP這些服務
我們主要是操作IIS的Web功能
因此此處就是
W
SVC
如果是FTP則應是
MSFTPSVC
WebSite:一個IIS服務中可以包括很多的站點
這個就用於設置操作的站點
他的值是一個數字
默認是
表示缺省站點
如果有其它
則從
開始依次類推
Directory:不用說
即操作的目錄名稱
一個站點一般頂層目錄為
ROOT
其它目錄則是他的孩子(Child)
首先我們獲取一個站點的頂層目錄(根目錄)
DirectoryEntry rootfolder = new DirectoryEntry(
IIS://localhost/W
SVC/
/ROOT
)
如果我們創建這個對象是沒有發生異常
則表示這個目錄是真實存在的
下面我們來添加新的虛擬目錄
比如我們要加的是
Aspcn
:
DirectoryEntry newVirDir = rootfolder
Children
Add(
Aspcn
IIsWebVirtualDir
)
newVirDir
Invoke(
AppCreate
true)
newVirDir
CommitChanges()
rootfolder
CommitChanges()
創建目錄的思路很簡單
即在根目錄的子集(rootfolder
Children)中再添加一條記錄
這裡使用的是 DirectoryEntries類中的Add方法
它返回的是一個DirectoryEntry
表示新加入的目錄
第一個參數是虛擬目錄的名字
第二個則是Schema的類名以表明我們加入的目錄類型
然後再使用DirectoryEntry的Invoke方法
調用ADSI中的
AppCreate
方法將目錄真正創建(似乎不走這一步也可以創建目錄成功
但是為了保險起見
大家還是用吧)
最後便是依次調用新
根目錄的 CommitChanges方法
確認此次操作
在創建新目錄時
我們也可以同時給這個目錄的屬性賦值
但是我的實戰經驗告訴我
最好不要這樣做
如果創建時就賦值
將有很多屬性不能賦值成功
比如重要的表示真實目錄的Path屬性
因此飛刀建議大家最好是先創建目錄
然後再賦值
即更新目錄信息
更新虛擬目錄
相信大家對IIS都比較熟悉
了解IIS中一些重要的設置
如可讀(AccessRead)
可寫(AccessWrite)
可執行(AccessExecute)等
這些都可通過對DirectoryEntry的Properties屬性集合的賦值來實現
賦值可以通過兩種方式來完成
第一種是調用Properties集合的Add方法
如
dir
Properties[
AccessRead
]
Add(true)
第二種是對第一個索引值賦值
dir
Properties[
AccessRead
][
] = true;
這兩種方法都是可行的
具體是要看你的喜好了
在進行賦值之前我們還是要確定要要賦值的目標吧
)這裡我們使用DirectoryEntries類的Find方法
如
DirectoryEntry de = rootfolder
Children
Find(
Aspcn
IIsVirtualDir
)
找到了
我們就可以賦值了
賦值時一定要好好看看啊
虛擬目錄的屬性值可以超多
一查一大堆
(太多了
飛刀我也不重復了
大家去微軟的站點上查
)
比較常用的有
AccessRead
AccessWrite
AccessExecute
AccessScript
DefaultDoc
EnableDefaultDoc
Path
刪除虛擬目錄
刪除虛擬目錄的方法也很簡單
就是找到你要刪除的虛擬目錄
然後調用AppDelete方法
DirectoryEntry de = rootfolder
Children
Find(
Aspcn
IIsVirtualDir
)
de
Invoke(
AppDelete
true)
rootfolder
CommitChanges()
還有一種方法
就是調用Root目錄的Delete方法
object[] paras = new object[
];
paras[
] =
IIsWebVirtualDir
; //表示操作的是虛擬目錄
paras[
] =
Aspcn
;
rootfolder
Invoke(
Delete
paras)
rootfolder
CommitChanges()
From:http://tw.wingwit.com/Article/program/net/201311/13547.html