.NET获取IIS7.0及以上版本托管服务信息

近期写了个扫描IIS托管站点然后定期注册到Consul的小工具,随意网上拷贝了个帮助类,搞完本机测试没问题,扔到服务器发现硕大的一个异常。。

System.Runtime.InteropServices.COMException (0x80005000): 未知错误(0x80005000)
在 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
在 System.DirectoryServices.DirectoryEntry.Bind()
在 System.DirectoryServices.DirectoryEntry.get_IsContainer()
在 System.DirectoryServices.DirectoryEntries.ChildEnumerator..ctor(DirectoryEntry container)

查了查资料发现是:

这段异常代码表明 IIS://localhost/W3SVC/1 的ADSI provider不存在或者无法访问。

打开IIS管理器你可以看到服务器的localhost(即默认站点)是存在的并正在运行,且主站点ID确实是1。这说明问题是出现在 IIS://localhost的ADSI provider。

坦白点就是:而IIS 7默认并没有安装ADSI provider。

解决方案:“控制面板”->“程序和功能”->面板左侧“打开或关闭windows功能”->“Web服务器(IIS)”->“管理工具”->“IIS 6管理兼容性”->“IIS 元数据库兼容性”。

代码部分比较简单:

using System.ServiceProcess;
using System.DirectoryServices;
public class IISManager
{
    public static List<IISWebServiceInfo> GetLocalWebSeriviceInfo_IIS6()
    {
        DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC");
        foreach (DirectoryEntry child in rootfolder.Children)
        {
            if (child.SchemaClassName == "IIsWebServer")
            {
                child.Properties["ServerComment"].Value.ToString();//服务名
                child.Properties["ServerState"].Value;//服务状态
                child.Properties["ServerBindings"].Value;//绑定信息
            }
        }
    }
}

弊端比较明显就是只支持IIS6及以下版本(安装ADSI provider),太麻烦。。

IIS7.0及以上版本获取服务信息可以使用Microsoft.Web.Administration,Nuget就能搜到

不得不说微软还是比较拼的。。这是要跨平台的节奏啊(Linux版IIS指日可待了吗。。。)

代码更简单了:

 using Microsoft.Web.Administration;
    class Program
    {
        static void Main(string[] args)
        {
             ServerManager sm = new ServerManager();
            foreach (var s in sm.Sites)
            {
                Console.WriteLine("网站名称:{0}", s.Name);
                Console.WriteLine("运行状态:{0}", s.State.ToString());
                foreach (var tmp in s.Bindings)
                {
                    System.Console.WriteLine("\t类型:{0}", tmp.Protocol);
                    System.Console.WriteLine("\tIP 地址:{0}", tmp.EndPoint.Address.ToString());
                    System.Console.WriteLine("\t端口:{0}", tmp.EndPoint.Port.ToString());
                    System.Console.WriteLine("\t主机名:{0}", tmp.Host);
                }
            }
            Console.ReadKey();
        }
    }

当然,在windows操作系统获取IIS信息是需要管理员权限的

时间: 2024-12-19 10:43:03

.NET获取IIS7.0及以上版本托管服务信息的相关文章

IIS7.0上传文件限制的解决方法

在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击. 指定 ASP 请求的实体主体中允许大小为 200,000 (IIS6为204,800) 个字节,在 iis 6.0 之前的版本中,例如:Windows XP(IIS 5.1),没有限制. 这就造成了文件上传不能超过200k,而事实上是提交数据不能超过200k,你可以发一个很长的帖子试试,也会出现这个

Cocos2d-X-3.0 之后的版本的环境搭建

 Cocos2d-X-3.0 之后的版本的环境搭建 由于cocos2d游戏开发引擎更新十分频繁,官方文档同步不够及时和完善.所以不要照着官方文档来照做生成工程. <点击图片就能进入网站> 具体的步骤: 1.获取cocos2d-X的源码v3.6版本 然后解压到随便什么位置,比如这里就放在桌面上,文件名cocos2d-x-3.6 2.使用5.1以上版本的XCode 3.将cocos2d-x-3.6中的setup.py直接拖到刚刚打开的终端,然后回车. 然后提示需要做一些环境变量的配置,第一个提示安

Windows-Server-2008、IIS7.0环境下配置伪静态化

在Windows-Server-2008.IIS7.0环境下配置伪静态化 首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为7.0,我们知道,IIS7.0与IIS6.0 的操作界面差别较大,如图(1)所示: 1.IIS7.0操作界面: 图(1) 2 新建网站同时新建应用程序池与网站对应,注意,在IIS7下新建网站之后,程序会自动新建应用程序池与之对应: 不需要再新建应用程序池.如图(2): 图(2) 3  添加网站详细页面如图(3)所示: 图(3)

IIS7.0与AP.NET

IIS7在请求的监听和分发机制上进行了革新性的改进,主要体现在对于Windows进行激活服务(Windows Process Activation Service ,WAS)的引入,将原来的W3SVC的部分功能分流给了WAS.W3SVC的主要功能:HttP请求接收.配置管理.进程管理. IIS7将后两组功能实现到了WAS中,接收Http请求的任务依然落在W3SVC上,WAS的引入为IIS7.0提供了对非Http协议的支持.WAS通过监听器适配器接口抽象出针对不同协议的监听器.具体说,除了给予网络

如何在IIS7.0环境下配置ShopNum1分销系统静态化

近来遇到有许多用户已经更换了最新的操作系统,那么,在新的操作系统.新的环境下,究竟 应该如何配置ShopNum1分销系统呢?下面,我们来为大家详细介绍一下如何在Windows Server 2008.IIS7.0环境下配置ShopNum1分销系统:        首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为7.0,我们知道,IIS7.0与IIS6.0   的操作界面差别较大,如图所示:     1.IIS7.0操作界面:     2 新建网站同

IIS7.0提示---无法识别的属性“targetFramework”。请注意属性名称区分大小写。

当我把我做的网站放在IIS7.0的服务器上的时候,浏览时提示这个错误信息 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性“targetFramework”.请注意属性名称区分大小写. 源错误: 行 6: <configuration> 行 7: <system.web> 行 8: <compilation debug="false" strict="

MVC4.0网站发布和部署到IIS7.0上的方法

最近在研究MVC4,使用vs2010,开发的站点在发布和部署到iis7上的过程中遇到了很多问题,现在将解决的过程记录下来,以便日后参考,整个过程主要以截图形式呈现 vs2010的安装和mvc4的安装不在本次记录之列,主要记录网站发布和iis的部署 使用的版本如下图所示: iis为7.0: vs2010,.net framework 为4.0.30310 ,安装mvc4需要升级vs2010到vs2010 sp1 版本,见图示: mvc4: 为了测试需要,在项目ZPG.SpecialSite中创建控

远程批量获取Linux和Windos操作系统版本(内核)

在不登录远程主机的情况下,可以查看远程主机的服务器操作系统版本(内核). 脚本执行前提: 1.拷贝check_snmp到脚本执行的主机中或在此主机中安装nagios; 2.保持list.txt中只有一个IP列 1 #!/bin/bash 2 #echo "">list_os.txt 3 \cp list.txt list_1.txt 4 awk {'print $1'} list.txt |while read line 5 do 6 echo $line 7 info=`/us

MVC4.0网站发布和部署到IIS7.0上的方法【转:http://www.th7.cn/Program/net/201403/183756.shtml】

最近在研究MVC4,使用vs2010,开发的站点在发布和部署到iis7上的过程中遇到了很多问题,现在将解决的过程记录下来,以便日后参考,整个过程主要以截图形式呈现 vs2010的安装和mvc4的安装不在本次记录之列,主要记录网站发布和iis的部署 使用的版本如下图所示: iis为7.0: vs2010,.net framework 为4.0.30310 ,安装mvc4需要升级vs2010到vs2010 sp1 版本,见图示: mvc4: 为了测试需要,在项目ZPG.SpecialSite中创建控