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