C#管理控制IIS7的方法

简介: 原文:C#管理控制IIS7的方法转自http://www.lob.cn/jq/csyy/7285.shtml 把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从iis6到iis7的过渡中也和我存在同样的疑问,开始的时候我需要在IIS7下创建虚拟目录,用的是DirecotryEntry这个类,怎么也不能,总会报错[System.Runtime.InteropServices.COMException]{"未知错误(0x80005000)"} 这个错误。
原文: C#管理控制IIS7的方法

转自

http://www.lob.cn/jq/csyy/7285.shtml

 

把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从iis6到iis7的过渡中也和我存在同样的疑问,开始的时候我需要在IIS7下创建虚拟目录,用的是DirecotryEntry这个类,怎么也不能,总会报错[System.Runtime.InteropServices.COMException]{"未知错误(0x80005000)"} 这个错误。


private static void TestDirectoryEntry()
        {
            
try
            {
                
string path = "IIsWebService://" + System.Environment.MachineName + "/W3SVC";
                System.Collections.ArrayList webSite 
= new System.Collections.ArrayList();
                DirectoryEntry iis 
= new DirectoryEntry("IIS://localhost/W3SVC");
                
if (iis != null)
                {
                    
foreach (DirectoryEntry entry in iis.Children)
                    {
                        
if (string.Compare(entry.SchemaClassName, "IIsWebServer"== 0)
                        {
                            Console.WriteLine(entry.Name);
                            Console.WriteLine(entry.Properties[
"ServerComment"].Value.ToString());
                            Console.WriteLine(entry.Path);
                        }
                        Console.WriteLine();
                    }
                }
            }
            
catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
        }
后来疯狂地找原因  '更多.net教程和源代码 来自乐博网lob.cn

第一步,找机子上安全方面的问题。我IIS7是装在Windows server2008上的。我取消了系统的UAC。并用“以管理员身份”运行的该程序。结果还是不行。

第二步,在网上找有没有人跟我碰到相同的问题。果然!很多人都有,网上给的解决方案是:

     The IIS Metabase and IIS6 Configuration Compatibility is not automatically installed when you enable the Web Server role in Windows 2008 Server.  If you enable this feature, your old DirectoryServices code in .NET should work like it used to.

需要安装 IIS6 Metabase 兼容性组件

     用了这种方案果然成功了!但事情并没有结束。

第三步:找原因,为什么IIS7 不能用这种方法!

     功夫不负有心人!

     IIS7 是没有元数据的。哎~~这就是根本原因,大家可以到C:\WINDOWS\system32\inetsrv这个目录看看,IIS6的和IIS7的文件不同的。

     所以后来找到这种方法: 

本文翻译整理自Carlos Aguilar Mares的blog文章: Microsoft.Web.Administration in IIS 7

请注意本文的内容均基于Windows Vista Beta 2版本,在正式的发布版本中可能会有所改变。

Microsoft中提供了管理IIS7的一些非常强大的API——Microsoft.Web.Administration,可以很方便的让我们以编程的方式管理,设定IIS 7的各项配置。Microsoft.Web.Administration.dll位于IIS的目录(%WinDir%\System32\InetSrv)下,在项目中添加对其的引用后您就可以使用这些API了。下图显示了Microsoft.Web.Administration.dll中的主要对象。


让我们通过几个例子来使用Microsoft.Web.Administration,下面的例子均非常易懂,我就不再过多解释了。

建立一个站点(Site)

ServerManager iisManager  =   new  ServerManager();
iisManager.Sites.Add(
" NewSite " " http " " *:8080: " " d:\\MySite " );
iisManager.Update(); 

将一个应用程序(Application)添加到一个站点

ServerManager iisManager  =   new  ServerManager();
iisManager.Sites[
" NewSite " ].Applications.Add( " /Sales " " d:\\MyApp " );
iisManager.Update(); 

建立一个虚拟目录(Virtual Directory)

ServerManager iisManager  =   new  ServerManager();
Application app 
=  iisManager.Sites[ " NewSite " ].Applications[ " /Sales " ];
app.VirtualDirectories.Add(
" /VDir " " d:\\MyVDir " );
iisManager.Update(); 

运行时控制:停止一个站点

ServerManager iisManager  =   new  ServerManager();
iisManager.Sites[
" NewSite " ].Stop(); 

运行时控制:回收应用程序池(Recyciling an Application Pool)

ServerManager iisManager  =   new  ServerManager();
iisManager.ApplicationPools[
" DefaultAppPool " ].Recycle(); 

运行时控制:得到当前正在处理的请求

ServerManager iisManager  =   new  ServerManager();
foreach (WorkerProcess w3wp  in  iisManager.WorkerProcesses) {
    Console.WriteLine(
" W3WP ({0}) " , w3wp.ProcessId);
            
    
foreach  (Request request  in  w3wp.GetRequests( 0 )) {
        Console.WriteLine(
" {0} - {1},{2},{3} " ,
                    request.Url,
                    request.ClientIPAddr,
                    request.TimeElapsed,
                    request.TimeInState);
    }
}

还有一个有用之处是Microsoft.Web.Administration提供了对*.config(例如web.config)文件的编辑功能,让您再也不用像修改普通XML文件一样修改*.config了。但是原作者说他将在今后的Post中详细说明,我也只暂且写到这里了。

我的问题从根本解决了,希望能帮助遇到同样问题的你!

目录
相关文章
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
1月前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
175 0
|
3月前
|
编译器 C# 开发者
C# 11.0中的新特性:覆盖默认接口方法
C# 11.0进一步增强了接口的灵活性,引入了覆盖默认接口方法的能力。这一新特性允许类在实现接口时,不仅可以提供接口中未实现的方法的具体实现,还可以覆盖接口中定义的默认方法实现。本文将详细介绍C# 11.0中接口默认方法覆盖的工作原理、使用场景及其对现有代码的影响,帮助开发者更好地理解和应用这一新功能。
|
3月前
|
安全 C# 开发者
C#中的默认接口方法:接口演化的新篇章
【1月更文挑战第11天】本文探讨了C# 8.0中引入的默认接口方法,这一特性允许在接口中定义具有默认实现的方法。文章介绍了默认接口方法的语法、使用场景,以及它们如何影响接口的设计和实现,同时讨论了默认接口方法带来的好处和潜在的陷阱。
|
4月前
|
缓存 C#
C# 操作路径(Path)类方法的使用与解析运行实例
C# 操作路径(Path)类方法的使用与解析运行实例
|
1月前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
1月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
1月前
|
开发框架 .NET 编译器
C#学习相关系列之匿名方法和Lambda表达式
C#学习相关系列之匿名方法和Lambda表达式
|
1月前
|
C#
C#中保留小数点后N位的方法_kaic
C#中保留小数点后N位的方法_kaic