using System;
using System.DirectoryServices;
using System.Collections;
namespace IISManagement
{
/// <summary>
/// IISManager 的摘要说明。
/// </summary>
public class IISManager
{
//定义需要使用的
private string _server,_website;
private VirtualDirectories _virdirs;
protected System.DirectoryServices.DirectoryEntry rootfolder;
private bool _batchflag;
public IISManager()
{
//默认情况下使用localhost,即访问本地机
_server = "localhost";
_website = "1";
_batchflag = false;
}
public IISManager(string strServer)
{
_server = strServer;
_website = "1";
_batchflag = false;
}
/// <summary>
/// 定义公共属性
/// </summary>
//Server属性定义访问机器的名字,可以是IP与计算名
public string Server
{
get{ return _server;}
set{ _server = value;}
}
//WebSite属性定义,为一数字,为方便,使用string
//一般来说第一台主机为1,第二台主机为2,依次类推
public string WebSite
{
get{ return _website; }
set{ _website = value; }
}
//虚拟目录的名字
public VirtualDirectories VirDirs
{
get{ return _virdirs; }
set{ _virdirs = value;}
}
///<summary>
///定义公共方法
///</summary>
//连接服务器
public void Connect()
{
ConnectToServer();
}
//为方便重载
public void Connect(string strServer)
{
_server = strServer;
ConnectToServer();
}
//为方便重载
public void Connect(string strServer,string strWebSite)
{
_server = strServer;
_website = strWebSite;
ConnectToServer();
}
//判断是否存这个虚拟目录
public bool Exists(string strVirdir)
{
return _virdirs.Contains(strVirdir);
}
//添加一个虚拟目录
public void Create(VirtualDirectory newdir)
{
string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" +
newdir.Name;
if(!_virdirs.Contains(newdir.Name) || _batchflag )
{
try
{
//加入到ROOT的Children集合中去
DirectoryEntry newVirDir =
rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
rootfolder.CommitChanges();
//然后更新数据
UpdateDirInfo(newVirDir,newdir);
}
catch(Exception ee)
{
throw new Exception(ee.ToString());
}
}
else
{
throw new Exception("This virtual directory is already exist.");
}
}
//得到一个虚拟目录
public VirtualDirectory GetVirDir(string strVirdir)
{
VirtualDirectory tmp = null;
if(_virdirs.Contains(strVirdir))
{
tmp = _virdirs.Find(strVirdir);
((VirtualDirectory)_virdirs[strVirdir]).flag = 2;
}
else
{
throw new Exception("This virtual directory is not exists");
}
return tmp;
}
//更新一个虚拟目录
public void Update(VirtualDirectory dir)
{
//判断需要更改的虚拟目录是否存在
if(_virdirs.Contains(dir.Name))
{
DirectoryEntry ode =
rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");
UpdateDirInfo(ode,dir);
}
else
{
throw new Exception("This virtual directory is not exists.");
}
}
//删除一个虚拟目录
public void Delete(string strVirdir)
{
if(_virdirs.Contains(strVirdir))
{
object[] paras = new object[2];
paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
paras[1] = strVirdir;
rootfolder.Invoke("Delete",paras);
rootfolder.CommitChanges();
}
else
{
throw new Exception("Can''t delete " + strVirdir + ",because it
isn''t exists.");
}
}
//批量更新
public void UpdateBatch()
{
BatchUpdate(_virdirs);
}
//重载一个:-)
public void UpdateBatch(VirtualDirectories vds)
{
BatchUpdate(vds);
}
///<summary>
///私有方法
///</summary>
//连接服务器
private void ConnectToServer()
{
string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";
try
{
this.rootfolder = new DirectoryEntry(strPath);
_virdirs = GetVirDirs(this.rootfolder.Children);
}
catch(Exception e)
{
throw new Exception("Can''t connect to the server ["+ _server
+"] ...",e);
}
}
//执行批量更新
private void BatchUpdate(VirtualDirectories vds)
{
_batchflag = true;
foreach(object item in vds.Values)
{
VirtualDirectory vd = (VirtualDirectory)item;
switch(vd.flag)
{
case 0:
break;
case 1:
Create(vd);
break;
case 2:
Update(vd);
break;
}
}
_batchflag = false;
}
//更新东东
private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)
{
de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;
de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;
de.Properties["AccessRead"][0] = vd.AccessRead;
de.Properties["AccessExecute"][0] = vd.AccessExecute;
de.Properties["AccessWrite"][0] = vd.AccessWrite;
de.Properties["AuthBasic"][0] = vd.AuthBasic;
de.Properties["AuthNTLM"][0] = vd.AuthNTLM;
de.Properties["ContentIndexed"][0] = vd.ContentIndexed;
de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;
de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;
de.Properties["AccessSSL"][0] = vd.AccessSSL;
de.Properties["AccessScript"][0] = vd.AccessScript;
de.Properties["DefaultDoc"][0] = vd.DefaultDoc;
de.Properties["Path"][0] = vd.Path;
de.CommitChanges();
}
//获取虚拟目录集合
private VirtualDirectories GetVirDirs(DirectoryEntries des)
{
VirtualDirectories tmpdirs = new VirtualDirectories();
foreach(DirectoryEntry de in des)
{
if(de.SchemaClassName == "IIsWebVirtualDir")
{
VirtualDirectory vd = new VirtualDirectory();
vd.Name = de.Name;
vd.AccessRead = (bool)de.Properties["AccessRead"][0];
vd.AccessExecute =
(bool)de.Properties["AccessExecute"][0];
vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];
vd.AnonymousUserName =
(string)de.Properties["AnonymousUserName"][0];
vd.AnonymousUserPass =
(string)de.Properties["AnonymousUserName"][0];
vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];
vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];
vd.ContentIndexed =
(bool)de.Properties["ContentIndexed"][0];
vd.EnableDefaultDoc =
(bool)de.Properties["EnableDefaultDoc"][0];
vd.EnableDirBrowsing =
(bool)de.Properties["EnableDirBrowsing"][0];
vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];
vd.AccessScript =
(bool)de.Properties["AccessScript"][0];
vd.Path = (string)de.Properties["Path"][0];
vd.flag = 0;
vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];
tmpdirs.Add(vd.Name,vd);
}
}
return tmpdirs;
}
}
<summary>
/// VirtualDirectory类
/// </summary>
public class VirtualDirectory
{
private bool
_read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;
private string _ausername,_auserpass,_name,_path;
private int _flag;
private string _defaultdoc;
/// <summary>
/// 构造函数
/// </summary>
public VirtualDirectory()
{
SetValue();
}
public VirtualDirectory(string strVirDirName)
{
_name = strVirDirName;
SetValue();
}
private void SetValue()
{
_read = true;_execute = false;_script = false;_ssl=
false;_write=false;_authbasic=false;_authntlm=false;
_indexed = false;_endirbrow=false;_endefaultdoc = false;
_flag = 1;
_defaultdoc = "default.htm,default.aspx,default.asp,index.htm";
_path = "C:\\";
_ausername = "";_auserpass ="";_name="";
}
///<summary>
///定义属性,IISVirtualDir太多属性了
///我只搞了比较重要的一些,其它的大伙需要的自个加吧。
///</summary>
public int flag
{
get{ return _flag;}
set{ _flag = value;}
}
public bool AccessRead
{
get{ return _read;}
set{ _read = value;}
}
public bool AccessWrite
{
get{ return _write;}
set{ _write = value;}
}
public bool AccessExecute
{
get{ return _execute;}
set{ _execute = value;}
}
public bool AccessSSL
{
get{ return _ssl;}
set{ _ssl = value;}
}
public bool AccessScript
{
get{ return _script;}
set{ _script = value;}
}
public bool AuthBasic
{
get{ return _authbasic;}
set{ _authbasic = value;}
}
public bool AuthNTLM
{
get{ return _authntlm;}
set{ _authntlm = value;}
}
public bool ContentIndexed
{
get{ return _indexed;}
set{ _indexed = value;}
}
public bool EnableDirBrowsing
{
get{ return _endirbrow;}
set{ _endirbrow = value;}
}
public bool EnableDefaultDoc
{
get{ return _endefaultdoc;}
set{ _endefaultdoc = value;}
}
public string Name
{
get{ return _name;}
set{ _name = value;}
}
public string Path
{
get{ return _path;}
set{ _path = value;}
}
public string DefaultDoc
{
get{ return _defaultdoc;}
set{ _defaultdoc = value;}
}
public string AnonymousUserName
{
get{ return _ausername;}
set{ _ausername = value;}
}
public string AnonymousUserPass
{
get{ return _auserpass;}
set{ _auserpass = value;}
}
}
/// <summary>
/// 集合VirtualDirectories
/// </summary>
public class VirtualDirectories : System.Collections.Hashtable
{
public VirtualDirectories()
{
}
//添加新的方法
public VirtualDirectory Find(string strName)
{
return (VirtualDirectory)this[strName];
}
}
}
分享到:
相关推荐
本文将深入探讨如何使用C#进行IIS根目录的操作,包括连接IIS服务器、检查虚拟目录是否存在、创建新的虚拟目录等关键步骤。 首先,我们需要导入必要的命名空间: ```csharp using System; using System.Directory...
虚拟路径是相对于IIS站点根目录的一个路径,比如"/Home/Index",它并不直接对应于硬盘上的文件位置。而物理路径则是一个具体的文件系统路径,例如"C:\inetpub\wwwroot\Home\Index.aspx",这是虚拟路径对应的实实在在...
2. **Site类和Application类**:Site类代表IIS中的一个网站,包含了网站的绑定信息、根目录等。Application类则代表一个应用程序,它在特定的路径下运行,并关联到一个特定的应用程序池。 3. **ApplicationPool类**...
本篇文章将详细探讨C#编程语言如何与IIS进行交互,实现如创建虚拟目录、设置站点属性等操作。 首先,要进行IIS控制操作,你需要引入`System.DirectoryServices`和`System.DirectoryServices.AccountManagement`这两...
然后,我们创建一个新的`DirectoryEntry`实例`virEntry`,表示站点的根目录,并再次遍历其子项,查找所有的虚拟目录。如果子项的`SchemaClassName`是"IIsWebVirtualDir",则输出虚拟目录的名称和路径。 为了获取...
首先,通过指定IIS根路径(如"IIS://localhost/W3SVC")创建DirectoryEntry对象,然后利用Create方法创建新的站点,设置其属性,如SiteName、Bindings(端口、主机头等)、PhysicalPath(网站根目录)。 2. **删除...
6. **默认文档问题**:可以添加默认文档以便在访问网站根目录时自动加载。 #### 四、WebService 调用示例 最后,提供一个简单的 WebService 调用示例。 1. **创建控制台应用程序**:新建一个控制台应用程序。 2. ...
IIS虚拟目录允许我们将网站内容放置在不同于网站根目录的物理位置,提供更好的组织和资源管理。下面将详细介绍如何使用C#在IIS服务器上创建虚拟目录,以及相关的技巧。 首先,我们需要了解`DirectoryEntry`类,这是...
6. **发布到IIS**:在Visual Studio中,使用“发布”功能,选择“文件系统”目标,然后将输出目录设置为IIS的网站根目录。也可以手动将编译后的服务项目复制到IIS的指定目录下。 7. **IIS配置**:在IIS管理器中,...
最后,`wwwroot`目录是Web服务的根目录,通常包含HTML、CSS、JavaScript文件以及ASP.NET编译后的DLL和其他Web资源。在IIS中,Web服务的内容需要部署到这个目录下才能被访问。 总的来说,C#结合IIS服务和Web服务,...
IIS 的默认网站根目录位于 C:\inetpub\wwwroot。这个位置是将要发布 WebService 的目标目录。你可以在此处放置你的 Web 应用程序文件,以便通过 IIS 服务访问。 在开发阶段,使用 Visual Studio(例如 VS2010)创建...
这段代码会在IIS中创建一个名为"MyNewSite"的新网站,其内容根目录位于"C:\\Websites\\MyNewSite",并且绑定到HTTP端口80,使用默认应用程序池。 2. **创建新应用程序池**: ```csharp ApplicationPool appPool = ...
在Windows 10环境下,使用Visual Studio 2019(VS2019)创建C# Web项目并将其发布部署到Internet Information Services (IIS) 是一个常见的开发流程。以下将详细介绍这一过程中的关键步骤和涉及的知识点。 首先,...
根据提供的文件信息,我们可以提取并总结出以下几个关键的知识点: ...通过分析源代码,我们不仅可以了解如何使用 C# 和 .NET 来操作 IIS,还可以进一步探索如何构建类似的应用程序或工具来简化日常的系统管理工作。
例如,`new DirectoryEntry("IIS://" + HostName + "/W3SVC/INFO")` 创建了一个指向IIS根节点的DirectoryEntry实例。 2. **属性操作**:DirectoryEntry对象的Properties集合包含了IIS的各种属性,如`...
在C#编程中,获取应用程序的根目录是常见的需求,无论是Web程序还是非Web程序,都有各自的方法。这里我们将详细探讨几种不同的获取根目录的方法。 对于非Web程序,也就是桌面应用或其他非基于HTTP的应用,有以下几...
2. 连接IIS服务器:使用DirectoryEntry类创建一个对象,指定IIS的根目录。例如: ``` DirectoryEntry iisManager = new DirectoryEntry("IIS://localhost/W3SVC"); ``` 3. 创建新站点:通过DirectoryEntry对象的...
除了直接在IIS根目录下创建应用程序之外,还可以通过虚拟目录的方式创建应用程序。这种方式可以让应用程序位于磁盘上的任意位置,而不仅仅局限于IIS的默认根目录。具体步骤如下: - 打开IIS管理器。 - 右键点击...
默认文档的设置也是引发404错误的原因之一,尤其是当用户访问网站根目录时。 **解决办法:** - 在IIS管理器中,进入网站属性。 - 选择文档选项卡。 - 确保启用了默认文档,并且设置正确。 ##### 2.7 应用程序映射...