.NET获取IIS配置

    一,概述

以前我们部署网站,需要通过窗口化打开iis,有时候是有点繁琐的,而在.NET2.0有了DirectoryEntry类,我们我可以方便部署网站,对站点进行增删改查,在网上可以找到很多如何通过DirectoryEntry类部署网站的,我在这里主要是讲如何通过DirectoryEntry类,操作IIS,在A站点获取B站点的信息。从而实现在A站点显示B站点的页面,使用B站点的资源。下面将展示一个通过站点端口号获取站点的信息,当然也可以通过各种信息获取站点所有信息。。当通过这个简单的列子,就可以自己实现配置IIS,而不需要看网上部署IIS大量代码。可以很快完成部署

效果图:



2



    二,需求

    有两个站点,A站点和B站点,在A站点一个菜单单击显示B站点的bpis_article.aspx文章页面,点击页面的树节点文章名字,显示B站的根目录下的word格式文章,

图片模拟需求:

1)下图是站点A,点击文章管理,会显示B站点的bpis_article.aspx页面

2)列表中所有的文章是B站点内容,单击具体文章会显示word格式文章

3)显示B站点子目录“文章”下 “RDLC中文数字转化函数.word”文章


三,需求关键点有两处:

  (1)这两个站点的服务器是不固定,IP也是动态的,例如北京路人甲的ip是172.168.1.5,那么单击A站点的文章管理url是“172.168.1.5:1004/Admin/bpis_article.aspx”,而广州的张三的IP是10.10.2.5:1003,那么单击A站点的文章管理url是“10.10.2.5:1003/Admin/bpis_article.aspx”,所以链接地址是动态的,有一种常用简单的方法,可以把A站点的连接地址放到配置文件,然后后台读取配置文件,这样修改的话,维护人员直接修改配置就可以了。比如路人甲直接就可以在配置文件添加<url name=""172.168.1.5:1004">,而张三只是<url name="10.10.2.5:1003"

   (2)在B站点显示RDLC中文数字转化函数.word”。可以同过文件类对文件进行读写,那么怎么获取RDLC中文数字转化函数.word的物理路径了,况且不同的人站点部署不一样,文件物理路径也不一样,这个也是要动态的,

有两种方法:

方法1:可以在B站点写一个web  service,获取B站点的根目录,而在A站点通过调用A站点的web service.

方法2:就是在通过读取DirectoryEntry读取IIS获取B站点的物理路径:先获取配置文件的“172.168.1.5:1004/”内容,然后截取节点:

  然后DirectoryEntry获取地址:

由于方法1要部署两个站点,所以采取方法2:

具体代码如下:

三:源码

site.aspx:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <table>
      <tr>
        <td>请输入端口号:</td>
        <td><asp:TextBox runat="server" ID="txt_port"></asp:TextBox>
         <asp:Button runat="server" ID="btn_getIis" Text="获取" 
                  οnclick="btn_getIis_Click" />
        </td>
      
      </tr>
      </table>
      <table >
        <tr>
          <td>端口:</td>
          <td><asp:Label runat="server" ID="lb_ServerBindgings"></asp:Label></td>
        </tr>
        <tr>
          <td>站点名称:</td>
          <td><asp:Label runat="server" ID="lb_ServerComment"></asp:Label></td>
        </tr>
        <tr>
           <td>站点路径:</td>
           <td><asp:Label runat="server" ID="lb_Path"></asp:Label></td>
        </tr>
        <tr>
           <td>站点编号:</td>
           <td><asp:Label runat="server" ID="lb_site" ></asp:Label></td>
        </tr>
   


      </table>
    
    </div>
    </form>
</body>
</html>

site.aspx.cs



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices;

public partial class site : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btn_getIis_Click(object sender, EventArgs e)
    {
        string[] strArr = GetSitePath(txt_port.Text);
        this.lb_ServerComment.Text = strArr[0];
        this.lb_ServerBindgings.Text = strArr[1];
        this.lb_Path.Text = strArr[2];
        this.lb_site.Text = strArr[3];

       

    }

    /// <summary>
    /// 获取iis下对应端口号的站点根目录
    /// </summary>
    /// <param name="port">端口号</param>
    /// <returns></returns>
    private string [] GetSitePath(string port)
    {
            string ServerComment = string.Empty;  //站点名字
            string ServerBingings=string.Empty;  //端口号
            string Path = string.Empty;     //站点跟目录
            string siteID = string.Empty;
            DirectoryEntry reportSite = new DirectoryEntry();  //端口号为1002的站点,为初始话
            try
            {
                #region 寻找端口号为1002的DirectoryEntry实例
                DirectoryEntry IISAdmin = new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC");//获取iis下所有站点
                foreach (System.DirectoryServices.DirectoryEntry site in IISAdmin.Children)   // 循环iis下所有站点,寻找端口号为1002的站点
                {
                    foreach (PropertyValueCollection pvc in site.Properties)
                    {
                        string PropertieName = pvc.PropertyName.ToString();
                        if (PropertieName == "ServerComment")
                        {
                            ServerComment = site.Properties[PropertieName].Value.ToString();
                        }
                        else if (PropertieName == "ServerBindings")
                        {
                            ServerBingings = site.Properties[PropertieName].Value.ToString();
                            ServerBingings = ServerBingings.Substring(1, ServerBingings.Length - 2);
                            if (ServerBingings == port.Trim())
                            {
                                reportSite = site;
                                break;
                            }
                        }
                    }

                    if (ServerBingings ==port.Trim())
                    {
                        reportSite = site;
                        break;
                    }
                }

                #endregion

                //端口号为1002的站点默认子站点虚拟跟目录Path
                if (reportSite!= null)
                {
                    foreach(DirectoryEntry ChildSite in reportSite.Children)
                    {
                        if (ChildSite.Name == "ROOT")
                        {
                            foreach (PropertyValueCollection pvc in ChildSite.Properties)
                            {
                                string PropertieName = pvc.PropertyName.ToString();
                                if (PropertieName == "Path")
                                {
                                    Path = ChildSite.Properties[PropertieName].Value.ToString();
                                    siteID = ChildSite.Parent.Name;
                                    break;
                                }
                            }
                            if (Path != "")
                            {
                                break;
                            }
                        }
                    }
                }
            }
            catch
            { 
            }
            return new string[] { ServerComment, ServerBingings, Path, siteID };
        }
}




   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值