仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 598|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET教程之ASP.NET经由过程WMI创立站点增加假造目次和...

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。媒介本文先容了ASP.NET怎样经由过程WMI创立站点、增加假造目次和增加主机头。而且已在WindowsServer2003及IIS6的情况下测试经由过程。这玩艺儿花了老子3地利间才弄定,用了几个小时写代码,并且傍边还花了很多工夫办理Win32:Accessdeniederror的成绩。固然我要指出的是,不管NETWORKSERVER帐户仍是IUSR_<servername>帐户都不要设置过年夜的权限。关于WMI和IISmetabase的平安机理,我仍是一窍不通的。我只不外办理成绩罢了。
看代码

起首要从Internet信息服务(IIS)办理器中猎取网站标识符,点击“网站”根节点,右边“标识符”显现的就是网站的ID。默许网站的标识符一般是1。
猎取网站标识的功效,我们要用到一个namespace,代码以下:
usingSystem.Management;
下文一切’ServerName’都暗示你的服务器称号,大概假如你的代码是当地运转的,也能够用一个点来暗示。
创立一个站点,你会用到以下函数。这个函数前往新网站的ID,如许你能够进一步对这个网站举行操纵。
  1. publicstaticstringCreateWebsite(stringserverName,stringappPoolName,stringip,stringpathToRoot,stringhostName,stringdomainName,intport){ConnectionOptionsoptions=newConnectionOptions();options.Authentication=AuthenticationLevel.Connect;options.EnablePrivileges=true;options.Impersonation=ImpersonationLevel.Impersonate;ManagementScopescope=newManagementScope(string.Format(@{0}ootMicrosoftIISv2,serverName),options);scope.Connect();ManagementObjectoW3SVC=newManagementObject(scope,newManagementPath(@"IIsWebService=W3SVC"),null);ManagementBaseObject[]serverBindings=newManagementBaseObject[1];serverBindings[0]=CreateServerBinding(scope,string.Format("{0}.{1}",hostName,domainName),ip,port);ManagementBaseObjectinputParameters=oW3SVC.GetMethodParameters("CreateNewSite");inputParameters["ServerComment"]=string.Format("{0}.{1}",hostName,domainName);inputParameters["ServerBindings"]=serverBindings;inputParameters["PathOfRootVirtualDir"]=pathToRoot;ManagementBaseObjectoutParameter=oW3SVC.InvokeMethod("CreateNewSite",inputParameters,null);stringsiteId=Convert.ToString(outParameter.Properties["ReturnValue"].Value).Replace("IIsWebServer=W3SVC/","").Replace("","");ManagementObjectoWebVirtDir=newManagementObject(scope,newManagementPath(string.Format(@"IIsWebVirtualDirSetting.Name=W3SVC/{0}/root",siteId)),null);oWebVirtDir.Properties["AppFriendlyName"].Value=string.Format("{0}.{1}",hostName,domainName);oWebVirtDir.Properties["AccessRead"].Value=true;oWebVirtDir.Properties["AuthFlags"].Value=5;//IntegratedWindowsAuth.oWebVirtDir.Properties["AccessScript"].Value=true;oWebVirtDir.Properties["AuthAnonymous"].Value=true;oWebVirtDir.Properties["AppPoolId"].Value=appPoolName;oWebVirtDir.Put();ManagementObjectsite=newManagementObject(scope,newManagementPath(Convert.ToString(outParameter.Properties["ReturnValue"].Value)),null);site.InvokeMethod("Start",null);returnsiteId;}
复制代码
创立一个假造目次:
  1. publicstaticvoidAddVirtualFolder(stringserverName,stringwebsiteId,stringname,stringpath){ManagementScopescope=newManagementScope(string.Format(@"{0}ootMicrosoftIISV2",serverName));scope.Connect();stringsiteName=string.Format("W3SVC/{0}/Root/{1}",websiteId,name);ManagementClassmc=newManagementClass(scope,newManagementPath("IIsWebVirtualDirSetting"),null);ManagementObjectoWebVirtDir=mc.CreateInstance();oWebVirtDir.Properties["Name"].Value=siteName;oWebVirtDir.Properties["Path"].Value=path;oWebVirtDir.Properties["AuthFlags"].Value=5;//IntegratedWindowsAuth.oWebVirtDir.Properties["EnableDefaultDoc"].Value=true;//date,time,size,extension,longdate;oWebVirtDir.Properties["DirBrowseFlags"].Value=0x4000003E;oWebVirtDir.Properties["AccessFlags"].Value=513;//readscriptoWebVirtDir.Put();ManagementObjectmo=newManagementObject(scope,newSystem.Management.ManagementPath("IIsWebVirtualDir="+siteName+""),null);ManagementBaseObjectinputParameters=mo.GetMethodParameters("AppCreate2");inputParameters["AppMode"]=2;mo.InvokeMethod("AppCreate2",inputParameters,null);mo=newManagementObject(scope,newSystem.Management.ManagementPath("IIsWebVirtualDirSetting="+siteName+""),null);mo.Properties["AppFriendlyName"].Value=name;mo.Put();}
复制代码
给网站增加一个主机头:
  1. publicstaticvoidAddHostHeader(stringserverName,stringhostHeader,stringip,intport,stringwebsiteID){ManagementScopescope=newManagementScope(string.Format(@"{0}ootMicrosoftIISV2",serverName));scope.Connect();stringsiteName=string.Format("W3SVC/{0}",websiteID);ManagementObjectmo=newManagementObject(scope,newSystem.Management.ManagementPath("IIsWebServerSetting="+siteName),null);ManagementBaseObject[]websiteBindings=(ManagementBaseObject[])mo.Properties["ServerBindings"].Value;ManagementObjectmco=CreateServerBinding(scope,hostHeader,ip,port);ManagementBaseObject[]newWebsiteBindings=newManagementBaseObject[websiteBindings.Length+1];websiteBindings.CopyTo(newWebsiteBindings,0);newWebsiteBindings[newWebsiteBindings.Length-1]=mco;mo.Properties["ServerBindings"].Value=newWebsiteBindings;mo.Put();}
复制代码
最初别忘了这个函数,它能够为网站绑定一个收集标识。
  1. privatestaticManagementObjectCreateServerBinding(ManagementScopescope,stringhostName,stringip,intport){ManagementClassmc=newManagementClass(scope,newManagementPath("ServerBinding"),null);ManagementObjectmco=mc.CreateInstance();mco.Properties["Hostname"].Value=hostName;mco.Properties["IP"].Value=ip;mco.Properties["Port"].Value=port;mco.Put();returnmco;}
复制代码
  1. [/code][size=3][b]注重的几点[/b][/size]
  2. 平安。假如之用下面的那坨代码还不可。我想方设法想让其运转,但貌似无视了2件事变。会见[color=#335533]WMI[/color]和IISmetabase。
  3. ASP.NET在WindowsServer2003和IIS6.0上运转默许利用的是NETWORKSERVICE帐户。可是,我们仍是要利用客户端摹拟。
  4. 以是在Web.config中增加上面一个设置:
  5. [quote][code]<identityimpersonate="true"/>
复制代码
[/quote][code][/code]利用了这个设置,IUSR_<servername>会利用客户端摹拟的体例往会见IISmetabase。在前面的文章里,我就用IUSR_来暗示这个帐户。不要健忘,在IUSR_前面加上你的服务器称号才是这个帐户的名字。
WMI权限设置


  • 把持面板&ndash;>办理工具&ndash;>盘算机办理&ndash;>服务和使用程序。
  • 右键WMI把持,点击“属性”。
  • 选择“平安”选项卡。
  • 睁开Root树
  • 点击MicrosoftIISv2。
  • 点击“平安设置”。
  • 点击“初级”。
  • 双击IUSR_(假如“组或用户称号”内里没有的话,就把它增加出来)
  • 把IUSR_“使用到”设置成“这个称号控件和子称号空间”
  • “同意”一切权限。
  • 一切窗口都点击“断定”。
IISmetabase权限设置


  • 下载并安装IIS6ResourceKit
  • 运转MetaBaseExplorer(在入手下手菜单的IISResourceKit中能够找到)。
  • 睁开树形目次,右键第一个或第二个节点而且选择“Permissions”。
  • 假如提醒你“Thecurrentkeyinheritsitssecuritypermissionsfromthekey/”,点击“是”。
  • 选择“IIS_IUSRS”,假如没有的话,把它增加出来。
  • 选择“FullControl”。
  • 一切窗口都点击“断定”。
有了充足的权限就可以运转了。
假如有高人能对这个办法谈谈本人的感受,而且能指出更好的设置IIS和WMI的办法,那就更赞了。记得之前,我都是本人捣鼓出来的,以是我不晓得这个办法是否是最好的计划。
假如你在运转代码的时分碰着任何成绩,我乐意效力。
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。
山那边是海 该用户已被删除
沙发
发表于 2015-1-19 13:56:37 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
简单生活 该用户已被删除
板凳
 楼主| 发表于 2015-2-4 13:08:42 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-9 23:02:04 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
小妖女 该用户已被删除
5#
发表于 2015-2-28 04:14:40 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
金色的骷髅 该用户已被删除
6#
发表于 2015-3-9 20:51:38 | 只看该作者
ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。
若天明 该用户已被删除
7#
发表于 2015-3-17 01:10:01 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
柔情似水 该用户已被删除
8#
发表于 2015-3-23 13:30:11 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-6 01:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表