csharp develop's room
C# 操作IIS6.0类
using
System;
using
System.DirectoryServices;
using
System.Collections;
using
System.Text.RegularExpressions;
using
System.Text;
namespace
Wuhy.ToolBox
{
/**/
///
public
class
IISAdminLib
{
UserName,Password,HostName的定义
#region
UserName,Password,HostName的定义
public
static
string
HostName
{
get
{
return
hostName;
}
set
{
hostName
=
value;
}
}
public
static
string
UserName
{
get
{
return
userName;
}
set
{
userName
=
value;
}
}
public
static
string
Password
{
get
{
return
password;
}
set
{
if
(UserName.Length
<=
1
)
{
throw
new
ArgumentException(
"
还没有指定好用户名。请先指定用户名
"
);
}
password
=
value;
}
}
public
static
void
RemoteConfig(
string
hostName,
string
userName,
string
password)
{
HostName
=
hostName;
UserName
=
userName;
Password
=
password;
}
private
static
string
hostName
=
"
localhost
"
;
private
static
string
userName;
private
static
string
password;
#endregion
根据路径构造Entry的方法
#region
根据路径构造Entry的方法
/**/
///
///
根据是否有用户名来判断是否是远程服务器。
///
然后再构造出不同的DirectoryEntry出来
///
///
DirectoryEntry的路径
///
返回的是DirectoryEntry实例
public
static
DirectoryEntry GetDirectoryEntry(
string
entPath)
{
DirectoryEntry ent;
if
(UserName
==
null
)
{
ent
=
new
DirectoryEntry(entPath);
}
else
{
//
ent = new DirectoryEntry(entPath, HostName+"
//
"+UserName, Password,
AuthenticationTypes.Secure);
ent
=
new
DirectoryEntry(entPath, UserName, Password,
AuthenticationTypes.Secure);
}
return
ent;
}
#endregion
添加,删除网站的方法
#region
添加,删除网站的方法
/**/
///
///
创建一个新的网站。根据传过来的信息进行配置
///
///
存储的是新网站的信息
public
static
void
createNewWebSite(NewWebSiteInfo siteInfo)
{
if
(
!
EnsureNewSiteEnavaible(siteInfo.BindString))
{
throw
new
DuplicatedWebSiteException(
"
已经有了这样的网站了。
"
+
Environment.NewLine
+
siteInfo.BindString);
}
string
entPath
=
String.Format(
"
IIS://{0}/w3svc
"
, HostName);
DirectoryEntry rootEntry
=
GetDirectoryEntry(entPath);
string
newSiteNum
=
GetNewWebSiteID();
DirectoryEntry newSiteEntry
=
rootEntry.Children.Add(newSiteNum,
"
IIsWebServer
"
);
newSiteEntry.CommitChanges();
newSiteEntry.Properties[
"
ServerBindings
"
].Value
=
siteInfo.BindString;
newSiteEntry.Properties[
"
ServerComment
"
].Value
=
siteInfo.CommentOfWebSite;
newSiteEntry.CommitChanges();
DirectoryEntry vdEntry
=
newSiteEntry.Children.Add(
"
root
"
,
"
IIsWebVirtualDir
"
);
vdEntry.CommitChanges();
vdEntry.Properties[
"
Path
"
].Value
=
siteInfo.WebPath;
vdEntry.CommitChanges();
}
/**/
///
///
删除一个网站。根据网站名称删除。
///
///
网站名称
public
static
void
deleteWebSiteByName(
string
siteName)
{
string
siteNum
=
GetWebSiteNum(siteName);
string
siteEntPath
=
String.Format(
"
IIS://{0}/w3svc/{1}
"
, HostName,
siteNum);
DirectoryEntry siteEntry
=
GetDirectoryEntry(siteEntPath);
string
rootPath
=
String.Format(
"
IIS://{0}/w3svc
"
, HostName);
DirectoryEntry rootEntry
=
GetDirectoryEntry(rootPath);
rootEntry.Children.Remove(siteEntry);
rootEntry.CommitChanges();
}
#endregion
Start和Stop网站的方法
#region
Start和Stop网站的方法
public
static
void
StartWebSite(
string
siteName)
{
string
siteNum
=
GetWebSiteNum(siteName);
string
siteEntPath
=
String.Format(
"
IIS://{0}/w3svc/{1}
"
, HostName,
siteNum);
DirectoryEntry siteEntry
=
GetDirectoryEntry(siteEntPath);
siteEntry.Invoke(
"
Start
"
,
new
object
[]
{}
);
}
public
static
void
StopWebSite(
string
siteName)
{
string
siteNum
=
GetWebSiteNum(siteName);
string
siteEntPath
=
String.Format(
"
IIS://{0}/w3svc/{1}
"
, HostName,
siteNum);
DirectoryEntry siteEntry
=
GetDirectoryEntry(siteEntPath);
siteEntry.Invoke(
"
Stop
"
,
new
object
[]
{}
);
}
#endregion
确认网站是否相同
#region
确认网站是否相同
/**/
///
///
确定一个新的网站与现有的网站没有相同的。
///
这样防止将非法的数据存放到IIS里面去
///
///
网站邦定信息
///
真为可以创建,假为不可以创建
public
static
bool
EnsureNewSiteEnavaible(
string
bindStr)
{
string
entPath
=
String.Format(
"
IIS://{0}/w3svc
"
, HostName);
DirectoryEntry ent
=
GetDirectoryEntry(entPath);
foreach
(DirectoryEntry child
in
ent.Children)
{
if
(child.SchemaClassName
==
"
IIsWebServer
"
)
{
if
(child.Properties[
"
ServerBindings
"
].Value
!=
null
)
{
if
(child.Properties[
"
ServerBindings
"
].Value.ToString()
==
bindStr)
{
return
false
;
}
}
}
}
return
true
;
}
#endregion
获取一个网站编号的方法
#region
获取一个网站编号的方法
/**/
///
///
获取一个网站的编号。根据网站的ServerBindings或者ServerComment来确定网站
编号
/**/
///
///
///
返回网站的编号
///
表示没有找到网站
public
static
string
GetWebSiteNum(
string
siteName)
{
Regex regex
=
new
Regex(siteName);
string
tmpStr;
string
entPath
=
String.Format(
"
IIS://{0}/w3svc
"
, HostName);
DirectoryEntry ent
=
GetDirectoryEntry(entPath);
foreach
(DirectoryEntry child
in
ent.Children)
{
if
(child.SchemaClassName
==
"
IIsWebServer
"
)
{
if
(child.Properties[
"
ServerBindings
"
].Value
!=
null
)
{
tmpStr
=
child.Properties[
"
ServerBindings
"
].Value.ToString();
if
(regex.Match(tmpStr).Success)
{
return
child.Name;
}
}
if
(child.Properties[
"
ServerComment
"
].Value
!=
null
)
{
tmpStr
=
child.Properties[
"
ServerComment
"
].Value.ToString();
if
(regex.Match(tmpStr).Success)
{
return
child.Name;
}
}
}
}
throw
new
NotFoundWebSiteException(
"
没有找到我们想要的站点
"
+
siteName);
}
#endregion
获取新网站id的方法
#region
获取新网站id的方法
/**/
///
///
获取网站系统里面可以使用的最小的ID。
///
这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。
///
这里面的算法经过了测试是没有问题的。
///
///
最小的id
public
static
string
GetNewWebSiteID()
{
ArrayList list
=
new
ArrayList();
string
tmpStr;
string
entPath
=
String.Format(
"
IIS://{0}/w3svc
"
, HostName);
DirectoryEntry ent
=
GetDirectoryEntry(entPath);
foreach
(DirectoryEntry child
in
ent.Children)
{
if
(child.SchemaClassName
==
"
IIsWebServer
"
)
{
tmpStr
=
child.Name.ToString();
list.Add(Convert.ToInt32(tmpStr));
}
}
list.Sort();
int
i
=
1
;
foreach
(
int
j
in
list)
{
if
(i
==
j)
{
i
++
;
}
}
return
i.ToString();
}
#endregion
}
新网站信息结构体
#region
新网站信息结构体
public
struct
NewWebSiteInfo
{
private
string
hostIP;
//
The Hosts IP Address
private
string
portNum;
//
The New Web Sites Port.generally is "80"
private
string
descOfWebSite;
//
网站表示。一般为网站的网站名。例如
"
www.dns.com.cn
"
private
string
commentOfWebSite;
//
网站注释。一般也为网站的网站名。
private
string
webPath;
//
网站的主目录。例如"e:/tmp"
public
NewWebSiteInfo(
string
hostIP,
string
portNum,
string
descOfWebSite,
string
commentOfWebSite,
string
webPath)
{
this
.hostIP
=
hostIP;
this
.portNum
=
portNum;
this
.descOfWebSite
=
descOfWebSite;
this
.commentOfWebSite
=
commentOfWebSite;
this
.webPath
=
webPath;
}
public
string
BindString
{
get
{
return
String.Format(
"
{0}:{1}:{2}
"
, hostIP, portNum, descOfWebSite);
}
}
public
string
CommentOfWebSite
{
get
{
return
commentOfWebSite;
}
}
public
string
WebPath
{
get
{
return
webPath;
}
}
}
#endregion
}
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2007-08-10 14:54
weboy
阅读(267)
评论(0)
编辑
收藏
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
使用Google钱包的坏消息,root后的设备存在PIN码泄露隐患
·
Windows 8省电新招:挂起Metro应用
·
清华网络机器人可与人交流走红
·
苹果收紧Mac应用开发控制:限制调用摄像头
·
消息称苹果将于3月第一个星期发布下一代iPad
»
更多新闻...
最新知识库文章
:
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
·
前端必读:浏览器内部工作原理
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
导航
博客园
首页
新随笔
联系
订阅
管理
统计
随笔 - 0
文章 - 4
评论 - 0
引用 - 0
公告
昵称:
weboy
园龄:
4年6个月
粉丝:
1
关注:
0
搜索
文章分类
优秀网摘(2)
(rss)
原创代码(2)
(rss)
最新评论
Powered by:
博客园
Copyright © weboy