您的位置:首页 > 其它

.NET获取IIS配置

2013-11-09 23:19 176 查看

    一,概述

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


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息