`
wyf
  • 浏览: 436474 次
  • 性别: Icon_minigender_1
  • 来自: 唐山
社区版块
存档分类
最新评论

C#操作IIS(转)可以写一个工具自己配置网站

阅读更多
using System;
using System.DirectoryServices;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;
 
namespace Demo
{
     /// <summary>
     ///  这个类是静态类。用来实现管理IIS的基本操作。
     ///  管理IIS有两种方式,一是ADSI,一是WMI。由于系统限制的原因,只好选择使用ADSI实现功能。
     ///  这是一个遗憾。只有等到只有使用IIS 6的时候,才有可能使用WMI来管理系统
     ///  不过有一个问题就是,我现在也觉得这样的一个方法在本地执行会比较的好。最好不要远程执行。
     ///  因为那样需要占用相当数量的带宽,即使要远程执行,也是推荐在同一个网段里面执行
     /// </summary>
     public class IISAdminLib
     {
          #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
 
          #region 根据路径构造Entry的方法
         /// <summary>
         ///  根据是否有用户名来判断是否是远程服务器。
         ///  然后再构造出不同的DirectoryEntry出来
         /// </summary>
         /// <param name="entPath">DirectoryEntry的路径</param>
         /// <returns>返回的是DirectoryEntry实例</returns>
         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 添加,删除网站的方法
         /// <summary>
         ///  创建一个新的网站。根据传过来的信息进行配置
         /// </summary>
         /// <param name="siteInfo">存储的是新网站的信息</param>
         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();
         }
 
         /// <summary>
         ///  删除一个网站。根据网站名称删除。
         /// </summary>
         /// <param name="siteName">网站名称</param>
         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
 
          #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 确认网站是否相同
         /// <summary>
         ///  确定一个新的网站与现有的网站没有相同的。
         ///  这样防止将非法的数据存放到IIS里面去
         /// </summary>
         /// <param name="bindStr">网站邦定信息</param>
         /// <returns>真为可以创建,假为不可以创建</returns>
         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 获取一个网站编号的方法
         /// <summary>
         ///  获取一个网站的编号。根据网站的ServerBindings或者ServerComment来确定网站编号
         /// </summary>
         /// <param name="siteName"></param>
         /// <returns>返回网站的编号</returns>
         /// <exception cref="NotFoundWebSiteException">表示没有找到网站</exception>
         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
 
          #region 获取新网站id的方法
         /// <summary>
         ///  获取网站系统里面可以使用的最小的ID。
         ///  这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。
         ///  这里面的算法经过了测试是没有问题的。
         /// </summary>
         /// <returns>最小的id</returns>
         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
}

 

分享到:
评论

相关推荐

    C#读取IIS网站物理路径

    在C#中操作IIS,可以方便地管理、配置和交互与IIS相关的应用。 首先,让我们深入了解IIS的虚拟路径和物理路径的概念。虚拟路径是相对于IIS站点根目录的一个路径,比如"/Home/Index",它并不直接对应于硬盘上的文件...

    C# 自动安装IIS,以及创建网站

    `CreateIISWebSite.zip`可能是一个包含完整项目文件的压缩包,而`IISClickInstall`可能是一个可执行文件,实现了点击安装IIS和创建网站的功能。开发者可以研究这些代码,学习如何在实际项目中应用类似的方法。 总结...

    用C#在IIS中创建一个Web站点源代码

    本教程将详细介绍如何使用C#来操作IIS,创建一个新的Web站点。 首先,要使用C#与IIS进行交互,我们需要引用`System.Web.Administration`命名空间,这个命名空间包含了管理IIS所需的各种类。通过`ServerManager`类,...

    C# IIS自动部署工具及源码

    总的来说,C# IIS自动部署工具及源码是一个宝贵的资源,不仅能够提高部署效率,还能作为教学实例,帮助开发者提升在C#编程和IIS管理方面的技能。通过研究和理解源码,开发者可以自定义工具以适应更复杂的部署场景,...

    C#WebService发布和IIS配置以及部分问题解决

    ### C# WebService 发布与 IIS 配置详解及常见问题解决 #### 一、IIS 安装与配置 在开始之前,确保已经安装了 Windows 的 Internet 信息服务 (IIS)。以下是如何安装 IIS 的步骤: 1. **打开控制面板**:通过开始...

    IIS控制操作(C#)

    1. 创建一个新的`DirectoryEntry`,指向"IIS://localhost/W3SVC",并调用`Create`方法创建一个新的网站,指定网站ID和类型(例如,"IIsWebServer")。 2. 设置新网站的属性,如`ServerComment`(站点描述)、`...

    C#做的IIS站点管理

    在这个场景中,我们讨论的是一个使用C#编写的IIS(Internet Information Services)站点管理工具。IIS是微软提供的一个全功能Web服务器,用于托管网站、应用程序和服务。 这个小工具的主要目标是简化IIS和FTP服务器...

    Web网站IIS配置工具

    IIS(Internet Information Services)是微软提供的一个强大的Web服务器,广泛用于托管网站和应用程序。对于IIS6.0及更高版本,管理和配置过程可以通过各种方式实现,其中就包括使用特定的配置工具,如本案例中的...

    C#IIS管理器(开源) IISManager

    【C# IIS管理器(开源) IISManager】是一个基于C#编程语言开发的工具,主要用于管理和配置IIS(Internet Information Services)服务器。IIS是微软提供的一个强大的Web服务器平台,广泛应用于企业级网站部署和管理...

    C#创建IIS站点,C#在2003系统创建站点

    IIS(Internet Information Services)是微软提供的一个强大的Web服务器,用于托管网站和服务。本篇文章将深入探讨如何使用C#编程语言在Windows Server 2003上创建IIS站点。 首先,我们要了解的是C#如何与IIS进行...

    C#读写配置文件(附源代码)

    压缩包中的"C#配置文件助手"可能包含了一个简单项目,演示了如何创建一个读取和写入配置文件的C#控制台应用。源代码可能包括以下几个关键部分: - `Program.cs`: 包含主方法,用于调用读写功能。 - `ConfigHelper...

    IIS替代工具

    IIS是微软提供的一个Web服务器服务,常用于Windows操作系统上,用于托管网站和应用程序。然而,IIS的安装和配置可能对一些用户来说较为复杂,或者在某些场景下,用户可能不需要完整的IIS功能集。在这种情况下,IIS...

    IIS替代工具IIS替代工具

    IIS(Internet Information Services)是微软提供的一个Web服务器软件,用于在Windows操作系统上托管网站和服务。然而,IIS并非唯一的选择,有许多其他优秀的IIS替代工具可以满足不同的Web服务需求。这些替代工具...

    C#IIS管理器(开源)

    C# IIS管理器通过创建ManagementObject实例,可以调用这些接口执行对IIS的操作,如创建网站、设置绑定、管理应用程序池等。 三、站点创建 创建IIS站点是C# IIS管理器的核心功能之一。这涉及到以下步骤: 1. 选择或...

    IIS设置初级教程,自己动手配置一个ASP调试环境

    IIS(Internet Information Services)是微软公司提供的一个Web服务器软件,用于托管各种Web应用程序,包括ASP(Active Server Pages)等。ASP是一种服务器端脚本技术,用于创建动态交互式网页。在Windows操作系统中...

    IIS多站点_C#_iis_多站点源码_

    总的来说,IIS多站点管理系统源码展示了如何利用C#和IIS管理API来高效地管理和控制Web服务器上的多站点环境,提供了一个方便的工具,使得系统管理员无需手动操作IIS管理控制台即可完成常见任务。

    zz.IIsAdmin.rar_C# IIS_IIS管理_csharp iis_iis_zz.IISADMIN

    4. **zz.IIsAdmin项目**:根据提供的压缩包文件名,我们可以推测“zz.IIsAdmin”是一个实现了上述功能的C#项目。这个项目可能包含了一个用户友好的界面,允许用户直观地管理IIS站点和服务,同时也可能提供了命令行...

    C#发布打包工具

    它是一个基于C#语言编写的独立应用程序,设计目标是为ASP.NET项目提供便捷的发布服务。用户无需打开庞大的Visual Studio,只需运行这个打包工具,即可完成项目的部署打包。这对于小型团队或个人开发者而言,无疑节省...

    c# wim创建IIS

    这通常涉及创建一个新的WIM映像,将IIS配置和网站内容添加进去,然后保存和封存映像。 8. **权限和安全性**:由于涉及到系统级别的操作,如挂载WIM和管理IIS,所以确保代码运行时具有足够的权限至关重要。可能需要...

    C#解决IIS域名批量绑定

    以下是一个基本的C#代码示例,展示了如何使用`System.Xml.Linq`库来添加新的IIS绑定: ```csharp using System; using System.Configuration; using System.Xml.Linq; public static void AddBinding(string ...

Global site tag (gtag.js) - Google Analytics