无聊,散分

sonysce 2003-07-17 04:28:06
用C#如何建立IIS站点,最好有原码
...全文
63 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CMIC 2003-07-17
  • 打赏
  • 举报
回复
我也只会创建虚拟目录
接分
goody9807 2003-07-17
  • 打赏
  • 举报
回复
接分
whatme168 2003-07-17
  • 打赏
  • 举报
回复
无聊...接分..
  • 打赏
  • 举报
回复
up
sonysce 2003-07-17
  • 打赏
  • 举报
回复
谢谢Poseidon2(hxy)大虾,这正是我想要的,这就结分
Poseidon2 2003-07-17
  • 打赏
  • 举报
回复
using System;
using System.DirectoryServices;
using System.Collections;
namespace IIS
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Web
{
private System.DirectoryServices.DirectoryEntry dirEntry=new DirectoryEntry();
public Web()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public ArrayList GetSites()
{
ArrayList webInfo=new ArrayList();
DirectoryEntry webServer=new DirectoryEntry("IIS://localhost/W3SVC");
foreach (DirectoryEntry site in webServer.Children)
{
string[] siteInfo=new string[4];
string strPort="";
if (site.SchemaClassName == "IIsWebServer")
{
strPort=site.Properties["ServerBindings"].Value.ToString();
siteInfo[0]=strPort.Substring(1,strPort.Length-2);
siteInfo[1]=site.Name;
siteInfo[2]=site.Properties["ServerComment"].Value.ToString();
siteInfo[3]=site.Properties["ServerState"].Value.ToString();
webInfo.Add(siteInfo);
}
}
return webInfo;
}
public ArrayList GetDirs(string parentDirName)
{
string strDir="IIS://localhost/W3SVC"+parentDirName;
DirectoryEntry dirEntry=new DirectoryEntry(strDir);
ArrayList dirs=new ArrayList();
foreach (DirectoryEntry site in dirEntry.Children)
{
dirs.Add(site.Name);
}
return dirs;
}
public bool IsDirExist(string parentDirName,string dirName)
{
return GetDirs(parentDirName).Contains(dirName);
}
public void CreateSite(string port,string siteName,string siteExplain,string defaultDoc)
{
DirectoryEntry de = new DirectoryEntry("IIS://localhost/"+"w3svc"); //从活动目录中获取IIS对象。
object[] prams = new object[2]{"IIsWebServer",Convert.ToInt32(siteName)};
DirectoryEntry site = (DirectoryEntry)de.Invoke("Create",prams); //创建IISWebServer对象。
site.Properties["KeyType"][0] = "IIsWebServer";
site.Properties["ServerComment"][0] =siteExplain; //站点说明
site.Properties["ServerState"][0] = 1; //站点初始状态,1.停止,2.启动,3
site.Properties["ServerSize"][0] = 1;
site.Properties["ServerBindings"].Add(":"+port+":"); //站点端口
site.CommitChanges(); //保存改变
de.CommitChanges();
DirectoryEntry root = site.Children.Add("Root","IIsWebVirtualDir"); //添加虚拟目录对象
root.Invoke("AppCreate",true); //创建IIS应用程序
root.Properties["path"][0] = @"c:\test"; //虚拟目录指向的物理目录
root.Properties["EnableDirBrowsing"][0] = true; //
root.Properties["AuthAnonymous"][0] = true;
root.Properties["AccessExecute"][0] = true;
root.Properties["AccessRead"][0] = true;
root.Properties["AccessWrite"][0] = true;
root.Properties["AccessScript"][0] = true;
root.Properties["AccessSource"][0] = true;
root.Properties["FrontPageWeb"][0] = false;
root.Properties["KeyType"][0] = "IIsWebVirtualDir";
root.Properties["AppFriendlyName"][0] =siteExplain; //应用程序名
root.Properties["AppIsolated"][0] = 2;
root.Properties["DefaultDoc"][0]=defaultDoc; //默认文档
root.Properties["EnableDefaultDoc"][0]=true; //是否启用默认文档
root.CommitChanges();
site.CommitChanges();
root.Close();
site.Close();
de.CommitChanges(); //保存
site.Invoke("Start",null); //除了在创建过程中置初始状态外,也可在此调用方法改变状态
}
public void CreateVirDir(string siteName,string dirName,string dirPath,string defaultDoc)
{
DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/"+siteName+"/ROOT");
DirectoryEntry newVirDir = rootfolder.Children.Add(dirName,"IIsWebVirtualDir");
newVirDir.Invoke("AppCreate",true);
newVirDir.CommitChanges();
rootfolder.CommitChanges();
newVirDir.Properties["EnableDefaultDoc"][0] =true;
newVirDir.Properties["DefaultDoc"][0] = defaultDoc;
newVirDir.Properties["Path"][0]=dirPath;
newVirDir.CommitChanges();
DirectoryEntry site=new DirectoryEntry("IIS://localhost/W3SVC/"+siteName);
site.Invoke("Stop",null);
site.Invoke("Start",null);
}
}
}
这是我写的一个类,可以建站点,虚拟目录,这下总可以给分了吧,我好穷的:)大哥,给我吧,实在不行我发原程序给你也行啊。
susanyw 2003-07-17
  • 打赏
  • 举报
回复
要分
sonysce 2003-07-17
  • 打赏
  • 举报
回复
上面的给的是建立虚拟目录,请问大虾如何建立站点呢?
supicbc 2003-07-17
  • 打赏
  • 举报
回复
接分,我要升级
edobnet 2003-07-17
  • 打赏
  • 举报
回复
要分
wtadminxjeri 2003-07-17
  • 打赏
  • 举报
回复
创建虚拟目录

DirectoryEntry是.Net给我们的一大礼物,他的名字我们就知道他的功能--目录入口。使用过ADSI的人都知道操作IIS,WinNT这些时,我们还需要提供他们的Path,操作IIS时,这个Path的格式为:

IIS://ComputerName/Service/Website/Directory

ComputerName:即操作的服务器的名字,可以是名字也可以是IP,经常用的就是localhost
Service:即操作的服务器,IIS中有Web,也有FTP,还有SMTP这些服务,我们主要是操作IIS的Web功能,因此此处就是"W3SVC",如果是FTP则应是"MSFTPSVC"
WebSite:一个IIS服务中可以包括很多的站点,这个就用于设置操作的站点。他的值是一个数字,默认是1,表示缺省站点,如果有其它,则从1开始依次类推。
Directory:不用说,即操作的目录名称,一个站点一般顶层目录为"ROOT",其它目录则是他的孩子(Child)。
首先我们获取一个站点的顶层目录(根目录):

DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/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"][0] = 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[2];
paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录
paras[1] = "Aspcn";
rootfolder.Invoke("Delete",paras);
rootfolder.CommitChanges();

喜欢哪一种就看编程习惯了:))

关于我写的类

我写的那个类库,将这些进一步简化了。只需要调用一下Connect()方法,就可直接操作Create,Delete方法了,程序可以进一步简化,并且支持批量操作。
zwztu 2003-07-17
  • 打赏
  • 举报
回复
接分
cwwwj 2003-07-17
  • 打赏
  • 举报
回复
接分
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2003-07-17 04:28
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。