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

C#管理IIS7

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
C# 管理IIS7 
摘自http://www.cnblogs.com/xl696128/archive/2008/12/30/1365198.html
最先我需要在IIS下创建虚拟目录,用的是DirecotryEntry这个类,怎么也不能,总会报![System.Runtime.InteropServices.COMException]{"未知错误(0x80005000)"} 
这个错误。
Code
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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);
            }
        }


 
后来疯狂地找原因
第一步,找机子上安全方面的问题。我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的文件不同的。
     所以后来找到这种方法:
     (http://dflying.cnblogs.com/archive/2006/04/17/377276.html)
 
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) 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ServerManager iisManager = new ServerManager();
iisManager.Sites.Add("NewSite", "http", "*:8080:", "d:\\\\MySite");
iisManager.Update(); 
 
将一个应用程序(Application)添加到一个站点 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ServerManager iisManager = new ServerManager();
iisManager.Sites["NewSite"].Applications.Add("/Sales", "d:\\\\MyApp");
iisManager.Update(); 

 
建立一个虚拟目录(Virtual Directory) 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ServerManager iisManager = new ServerManager();
Application app = iisManager.Sites["NewSite"].Applications["/Sales"];
app.VirtualDirectories.Add("/VDir", "d:\\\\MyVDir");
iisManager.Update(); 
 
运行时控制:停止一个站点 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ServerManager iisManager = new ServerManager();
iisManager.Sites["NewSite"].Stop(); 
 
运行时控制:回收应用程序池(Recyciling an Application Pool) 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->ServerManager iisManager = new ServerManager();
iisManager.ApplicationPools["DefaultAppPool"].Recycle(); 
 
运行时控制:得到当前正在处理的请求 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->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);
    }
}
 
OK,问题从根本解决了,希望能帮助遇到同样问题的你!
Tag标签: IIS7,metabase,System.Runtime.InteropServices.COMException,Microsoft.Web.Administration in IIS 7,DirectoryEntry

鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
c#泛型方法返回null的问题发布时间:2022-07-10
下一篇:
C#开发者的代码审查清单发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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