.NET获取IIS配置

来源:互联网 发布:淘宝商务模式分析 编辑:程序博客网 时间:2024/05/16 12:04

    一,概述

以前我们部署网站,需要通过窗口化打开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="获取"                   onclick="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 };        }}




   

原创粉丝点击