.NET获取IIS7.0及以上版本托管服务信息
2018-06-22 07:46:00来源:未知 阅读 ()
近期写了个扫描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信息是需要管理员权限的
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net源程序编译为dll文件并调用的实现过程 2020-03-29
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- Asp.Net中WebForm的生命周期 2020-03-29
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash