【标题】.NET实现添加和删除站点主机头
【代码】
【说明】
1、添加主机头时,可能提示无访问权限之类的错误,一般可以采用如下的方法解决:
A、当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。可以尝试修改该标识的访问权限。
B、模拟指定的用户帐号。
在Web.config文件的<identity>标记中指定具体的用户帐号:
<identity impersonate="true" userName="accountname" password="password" />这时该ASP.NET应用程序的所有页面的所有请求都将以指定的用户帐号权限执行。
请参考:微软中国社区
ASP实现站点主机头的添加与删除
【代码】
1 using System;
2 using System.DirectoryServices;
3
4 namespace PPT.Biz
5 {
6 /// <summary>
7 /// HostHead 的摘要说明。
8 /// </summary>
9 public class HostHead
10 {
11 public HostHead()
12 {
13
14 }
15
16 private static int siteId =752236766;//站点的ID
17
18 /// <summary>
19 /// DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/1/root");
20 /// 说明:
21 /// siteid,默认站点是1,对于非默认站点,通过查看站点日志文件名就可以知道。
22 ///或者直接查看文件C:\WINDOWS\system32\inetsrv\MetaBase.xml
23 ///如果提示没有访问权限,请尝试使用虚拟帐号:
24 ///<identity impersonate="true" userName="managerisdavid.weihw" password="@#$%&%#$%sdfgsdaf34756" />
25 /// </summary>
26 /// <param name="siteid"></param>
27 /// <param name="ip"></param>
28 /// <param name="port"></param>
29 /// <param name="domain"></param>
30 public static void AddHostHeader(int siteid, string ip, int port, string domain)//增加主机头(站点编号.ip.端口.域名)
31 {
32 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid);
33 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
34 string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain);
35 if (!serverBindings.Contains(headerStr))
36 {
37 serverBindings.Add(headerStr);
38 }
39 site.CommitChanges();
40 }
41
42 public static void DeleteHostHeader(int siteid, string ip, int port, string domain)//增加主机头(站点编号.ip.端口.域名)
43 {
44 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid);
45 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
46 string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain);
47 if (serverBindings.Contains(headerStr))
48 {
49 serverBindings.Remove (headerStr);
50 }
51 site.CommitChanges();
52 }
53
54
55 public static void AddHostHeader(string domain)
56 {
57 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/"+siteId);
58
59 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
60 string headerStr = string.Format("{0}:{1}:{2}",null,80,domain);
61 if (!serverBindings.Contains(headerStr))
62 {
63 serverBindings.Add(headerStr);
64 }
65 site.CommitChanges();
66 }
67
68 public static void DeleteHostHeader(string domain)
69 {
70 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/"+siteId);
71
72 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
73 string headerStr = string.Format("{0}:{1}:{2}",null,80,domain);
74 if (serverBindings.Contains(headerStr))
75 {
76 serverBindings.Remove(headerStr);
77 }
78 site.CommitChanges();
79 }
80 }
81 }
2 using System.DirectoryServices;
3
4 namespace PPT.Biz
5 {
6 /// <summary>
7 /// HostHead 的摘要说明。
8 /// </summary>
9 public class HostHead
10 {
11 public HostHead()
12 {
13
14 }
15
16 private static int siteId =752236766;//站点的ID
17
18 /// <summary>
19 /// DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/1/root");
20 /// 说明:
21 /// siteid,默认站点是1,对于非默认站点,通过查看站点日志文件名就可以知道。
22 ///或者直接查看文件C:\WINDOWS\system32\inetsrv\MetaBase.xml
23 ///如果提示没有访问权限,请尝试使用虚拟帐号:
24 ///<identity impersonate="true" userName="managerisdavid.weihw" password="@#$%&%#$%sdfgsdaf34756" />
25 /// </summary>
26 /// <param name="siteid"></param>
27 /// <param name="ip"></param>
28 /// <param name="port"></param>
29 /// <param name="domain"></param>
30 public static void AddHostHeader(int siteid, string ip, int port, string domain)//增加主机头(站点编号.ip.端口.域名)
31 {
32 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid);
33 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
34 string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain);
35 if (!serverBindings.Contains(headerStr))
36 {
37 serverBindings.Add(headerStr);
38 }
39 site.CommitChanges();
40 }
41
42 public static void DeleteHostHeader(int siteid, string ip, int port, string domain)//增加主机头(站点编号.ip.端口.域名)
43 {
44 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/" + siteid);
45 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
46 string headerStr = string.Format("{0}:{1}:{2}", ip, port, domain);
47 if (serverBindings.Contains(headerStr))
48 {
49 serverBindings.Remove (headerStr);
50 }
51 site.CommitChanges();
52 }
53
54
55 public static void AddHostHeader(string domain)
56 {
57 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/"+siteId);
58
59 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
60 string headerStr = string.Format("{0}:{1}:{2}",null,80,domain);
61 if (!serverBindings.Contains(headerStr))
62 {
63 serverBindings.Add(headerStr);
64 }
65 site.CommitChanges();
66 }
67
68 public static void DeleteHostHeader(string domain)
69 {
70 DirectoryEntry site = new DirectoryEntry("IIS://localhost/W3SVC/"+siteId);
71
72 PropertyValueCollection serverBindings = site.Properties["ServerBindings"];
73 string headerStr = string.Format("{0}:{1}:{2}",null,80,domain);
74 if (serverBindings.Contains(headerStr))
75 {
76 serverBindings.Remove(headerStr);
77 }
78 site.CommitChanges();
79 }
80 }
81 }
【说明】
1、添加主机头时,可能提示无访问权限之类的错误,一般可以采用如下的方法解决:
A、当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。可以尝试修改该标识的访问权限。
B、模拟指定的用户帐号。
在Web.config文件的<identity>标记中指定具体的用户帐号:
<identity impersonate="true" userName="accountname" password="password" />这时该ASP.NET应用程序的所有页面的所有请求都将以指定的用户帐号权限执行。
请参考:微软中国社区
ASP实现站点主机头的添加与删除
<script>
function check()
{
var yourname=document.form1.yourname.value
if(yourname==""||fucCheckyourname(yourname)==0)
{
alert("请输入域名或者您申请的域名不合法,请重新选择");
return false;
document.form1.yourname.focus;
}
else
return true;
}
function fucCheckyourname(yourname)
{
var i,j,strTemp;
strTemp="0123456789abcdefghijklmnopqrstuvwxyz";
for (i=0;i<yourname.length;i++ )
{
j=strTemp.indexOf(yourname.charAt(i));
if (j==-1)
{
//说明有字符不合法
return 0;
}
}
//说明合法
return 1;
}
</script>
<form id="form1" name="form1" method="post" action="">
<label>请选择域名:Http://
<input type="text" name="yourname"/>
</label>
.xawgd.cn
<label>
<input type="submit" name="Submit" value="提交" onclick="return check()" />
<input type="hidden" name="flag" value="add" />
</label>
</form>
<%
if request.Form("flag")="add" then
dnsname=request.Form("yourname")
dnsname=dnsname&i
AddWebSiteHostName 1,":7655:"&""&dnsname&""&".xawgd.cn" '访问ip,端口,主机头名"
response.Write("<script>alert('申请成功,你申请的站点域名为http://"&dnsname&".xawgd.cn')</script>")
Response.Write("<script>window.opener=null;window.close();</script>")
end if
%>
<%
'===============================================================
'函数名称:AddWebSiteHostName
'函数功能:在已存在的站点中主机头中添加新的主机头
' index 站点编号
' NewWebTop 主机头字符串
'例如:NewWebTop="192.168.0.163:80:aaa.xawgd.cn"'访问ip,端口,主机头名
' index="1" 站点编号。1为默认站点
'===============================================================
Public Function AddWebSiteHostName(index, NewWebTop)
On Error Resume Next
Dim tmpwebtop, ztop, oWebServer, tmpstring, Computer
Computer = "localhost"
Set oWebServer = Getobject("IIS://" & Computer & "/w3svc/" & index)
tmpwebtop = oWebServer.serverbindings '获取原来的主机头
tmpstring = Join(tmpwebtop, "|||")
If InStr(tmpstring, "|||" & NewWebTop & "|||") Or InStr(tmpstring, "|||" & NewWebTop) Or InStr(tmpstring, NewWebTop & "|||") = 1 Then
oWebServer.serverbindings = tmpwebtop
Else
ReDim Preserve tmpwebtop(UBound(tmpwebtop) + 1)
tmpwebtop(UBound(tmpwebtop)) = NewWebTop
oWebServer.serverbindings = tmpwebtop
End If
tmpwebtop = oWebServer.serverbindings
tmpstring = Join(tmpwebtop, "|||")
oWebServer.SetInfo
End Function
%>
function check()
{
var yourname=document.form1.yourname.value
if(yourname==""||fucCheckyourname(yourname)==0)
{
alert("请输入域名或者您申请的域名不合法,请重新选择");
return false;
document.form1.yourname.focus;
}
else
return true;
}
function fucCheckyourname(yourname)
{
var i,j,strTemp;
strTemp="0123456789abcdefghijklmnopqrstuvwxyz";
for (i=0;i<yourname.length;i++ )
{
j=strTemp.indexOf(yourname.charAt(i));
if (j==-1)
{
//说明有字符不合法
return 0;
}
}
//说明合法
return 1;
}
</script>
<form id="form1" name="form1" method="post" action="">
<label>请选择域名:Http://
<input type="text" name="yourname"/>
</label>
.xawgd.cn
<label>
<input type="submit" name="Submit" value="提交" onclick="return check()" />
<input type="hidden" name="flag" value="add" />
</label>
</form>
<%
if request.Form("flag")="add" then
dnsname=request.Form("yourname")
dnsname=dnsname&i
AddWebSiteHostName 1,":7655:"&""&dnsname&""&".xawgd.cn" '访问ip,端口,主机头名"
response.Write("<script>alert('申请成功,你申请的站点域名为http://"&dnsname&".xawgd.cn')</script>")
Response.Write("<script>window.opener=null;window.close();</script>")
end if
%>
<%
'===============================================================
'函数名称:AddWebSiteHostName
'函数功能:在已存在的站点中主机头中添加新的主机头
' index 站点编号
' NewWebTop 主机头字符串
'例如:NewWebTop="192.168.0.163:80:aaa.xawgd.cn"'访问ip,端口,主机头名
' index="1" 站点编号。1为默认站点
'===============================================================
Public Function AddWebSiteHostName(index, NewWebTop)
On Error Resume Next
Dim tmpwebtop, ztop, oWebServer, tmpstring, Computer
Computer = "localhost"
Set oWebServer = Getobject("IIS://" & Computer & "/w3svc/" & index)
tmpwebtop = oWebServer.serverbindings '获取原来的主机头
tmpstring = Join(tmpwebtop, "|||")
If InStr(tmpstring, "|||" & NewWebTop & "|||") Or InStr(tmpstring, "|||" & NewWebTop) Or InStr(tmpstring, NewWebTop & "|||") = 1 Then
oWebServer.serverbindings = tmpwebtop
Else
ReDim Preserve tmpwebtop(UBound(tmpwebtop) + 1)
tmpwebtop(UBound(tmpwebtop)) = NewWebTop
oWebServer.serverbindings = tmpwebtop
End If
tmpwebtop = oWebServer.serverbindings
tmpstring = Join(tmpwebtop, "|||")
oWebServer.SetInfo
End Function
%>
[Tag] .NET添加与删除站点主机头 二级域名 虚拟指定的帐号 ASP实现添加与删除站点主机头