• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#中操作IIS7.0

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
Microsoft自Windows Vista一起发布了IIS 7.0,这个已经是去年的话题了,随后,由.NET开发的Web程序便逐步从IIS 6.0过渡到IIS 7.0上了。IIS 7.0提供了很多比上一版本更多的新特性,包括完全模块化的组件、文本文件的配置功能、MMC图形模式管理工具等等,并且与.NET编程语言结合得更加紧密了,在新添加的Microsoft.Web.Administration名称空间中也增加了很多用于管理和访问IIS的对象,从而使得通过编程方式操作IIS更加简便。

  虽然在IIS 6.0时代我们也可以非常轻松地通过C#来管理服务器的IIS,但相对来说,现在需要编写的代码更少,所能完成的功能更强。以下是我在曾经做的一个项目中所写的一个类库中的一部分,主要实现了对IIS 7.0的操作,包括创建和删除站点、创建和删除虚拟目录、创建和删除应用程序池、添加站点默认文档、判断站点和虚拟目录是否存在、以及检查Bindings信息等。

  首先是对站点的管理。我写了一个相对较为通用的私有方法,然后在对外的方法中给出了调用接口,包括了创建站点时应用程序池的创建和权限的管理。

CreateSite
/// <summary>
/// Create a new web site.
/// </summary>
/// <param name="siteName"></param>
/// <param name="bindingInfo">"*:&lt;port&gt;:&lt;hostname&gt;" <example>"*:80:myhost.com"</example></param>
/// <param name="physicalPath"></param>
public static void CreateSite(string siteName, string bindingInfo,
string physicalPath)
{
    createSite(siteName,
"http", bindingInfo, physicalPath, true,
siteName
+ "Pool", ProcessModelIdentityType.NetworkService, null, null, ManagedPipelineMode.Integrated, null);
}

private static void createSite(string siteName, string protocol,
string bindingInformation, string physicalPath,
        
bool createAppPool, string appPoolName,
ProcessModelIdentityType identityType,
        
string appPoolUserName, string appPoolPassword,
ManagedPipelineMode appPoolPipelineMode,
string
managedRuntimeVersion)
{
    
using (ServerManager mgr = new ServerManager())
    {
        Site site
= mgr.Sites.Add(siteName, protocol,
bindingInformation, physicalPath);

        
// PROVISION APPPOOL IF NEEDED
        if (createAppPool)
        {
            ApplicationPool pool
= mgr.ApplicationPools.Add
(appPoolName);
            
if (pool.ProcessModel.IdentityType != identityType)
            {
                pool.ProcessModel.IdentityType
= identityType;
            }
            
if (!String.IsNullOrEmpty(appPoolUserName))
            {
                pool.ProcessModel.UserName
= appPoolUserName;
                pool.ProcessModel.Password
= appPoolPassword;
            }
            
if (appPoolPipelineMode != pool.ManagedPipelineMode)
            {
                pool.ManagedPipelineMode
= appPoolPipelineMode;
            }

            site.Applications[
"/"].ApplicationPoolName = pool.Name;
        }

        mgr.CommitChanges();
    }
}

  这个是删除站点的方法,比较简单。

DeleteSite
/// <summary>
/// Delete an existent web site.
/// </summary>
/// <param name="siteName">Site name.</param>
public static void DeleteSite(string siteName)
{
    
using (ServerManager mgr = new ServerManager())
    {
        Site site
= mgr.Sites[siteName];
        
if (site != null)
        {
            mgr.Sites.Remove(site);
            mgr.CommitChanges();
        }
    }
}

 

后是对虚拟目录的操作,包括创建和删除虚拟目录,都比较简单。
CreateVDir
public static void CreateVDir(string siteName, string vDirName,
string physicalPath)
{
    
using (ServerManager mgr = new ServerManager())
    {
        Site site
= mgr.Sites[siteName];
        
if (site == null)
        {
            
throw new ApplicationException(String.Format
(
"Web site {0} does not exist", siteName));
        }
        site.Applications.Add(
"/" + vDirName, physicalPath);
        mgr.CommitChanges();
    }
}


DeleteVDir
public static void DeleteVDir(string siteName, string vDirName)
{    
    
using (ServerManager mgr = new ServerManager())
    {
        Site site
= mgr.Sites[siteName];
        
if (site != null)
        {
            Microsoft.Web.Administration.Application app
=
site.Applications[
"/" + vDirName];
            
if (app != null)
            {
                site.Applications.Remove(app);
                mgr.CommitChanges();
            }
        }
    }
}

  删除应用程序池。

DeletePool
/// <summary>
/// Delete an existent web site app pool.
/// </summary>
/// <param name="appPoolName">
App pool name for deletion.</param>
public static void DeletePool(string appPoolName)
{
    
using (ServerManager mgr = new ServerManager())
    {
        ApplicationPool pool
= mgr.ApplicationPools[appPoolName];
        
if (pool != null)
        {
            mgr.ApplicationPools.Remove(pool);
            mgr.CommitChanges();
        }
    }
}

  在站点上添加默认文档。

AddDefaultDocument
public static void AddDefaultDocument
(
string siteName, string defaultDocName)
{
    
using (ServerManager mgr = new ServerManager())
    {
        Configuration cfg
= mgr.GetWebConfiguration
(siteName);
        ConfigurationSection defaultDocumentSection
= cfg.GetSection("system.webServer/defaultDocument");
        ConfigurationElement filesElement
=
defaultDocumentSection.GetChildElement(
"files");
        ConfigurationElementCollection filesCollection
=
filesElement.GetCollection();

        
foreach (ConfigurationElement elt in filesCollection)
        {
            
if (elt.Attributes["value"].Value.ToString() ==
defaultDocName)
            {
                
return;
            }
        }

        
try
        {
            ConfigurationElement docElement
=
filesCollection.CreateElement();
            docElement.SetAttributeValue(
"value", defaultDocName);
            filesCollection.Add(docElement);
        }
        
catch (Exception) { }   //this will fail if existing

        mgr.CommitChanges();
    }
}
检查虚拟目录是否存在。
VerifyVirtualPathIsExist
public static bool VerifyVirtualPathIsExist(string siteName, string path)
{
    
using (ServerManager mgr = new ServerManager())
    {
        Site site
= mgr.Sites[siteName];
        
if (site != null)
        {
            
foreach (Microsoft.Web.Administration.Application app in site.Applications)
            {
                
if (app.Path.ToUpper().Equals(path.ToUpper()))
                {
                    
return true;
                }
            }
        }
    }

    
return false;
}

  检查站点是否存在。

VerifyWebSiteIsExist
public static bool VerifyWebSiteIsExist(string siteName)
{
    
using (ServerManager mgr = new ServerManager())
    {
        
for (int i = 0; i < mgr.Sites.Count; i++)
        {
            
if (mgr.Sites[i].Name.ToUpper().Equals(siteName.ToUpper()))
            {
                
return true;
            }
        }
    }

    
return false;
}

  检查Bindings信息。

VerifyWebSiteBindingsIsExist
public static bool VerifyWebSiteBindingsIsExist(string bindingInfo)
{
    
string temp = string.Empty;
    
using (ServerManager mgr = new ServerManager())
    {
        
for (int i = 0; i < mgr.Sites.Count; i++)
        {
            
foreach (Microsoft.Web.Administration.Binding b in mgr.Sites[i].Bindings)
            {
                temp
= b.BindingInformation;
                
if (temp.IndexOf('*') < 0)
                {
                    temp
= "*" + temp;
                }
                
if (temp.Equals(bindingInfo))
                {
                    
return true;
                }
            }
        }
    }

    
return false;
}

  以上代码均在Windows Vista SP1和Windows Server 2008上测试通过,使用时需要在工程中引用Microsoft.Web.Administration类库,该类库为IIS 7.0自带的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Godaddy邮箱C#发送邮件设置发布时间:2022-07-13
下一篇:
C#中父类与子类的隐式和显式转换问题发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap