简单生活 发表于 2015-1-16 22:28:31

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

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

起首要从Internet信息服务(IIS)办理器中猎取网站标识符,点击“网站”根节点,右边“标识符”显现的就是网站的ID。默许网站的标识符一般是1。
猎取网站标识的功效,我们要用到一个namespace,代码以下:
usingSystem.Management;
下文一切’ServerName’都暗示你的服务器称号,大概假如你的代码是当地运转的,也能够用一个点来暗示。
创立一个站点,你会用到以下函数。这个函数前往新网站的ID,如许你能够进一步对这个网站举行操纵。
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;serverBindings=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;}创立一个假造目次:
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();}给网站增加一个主机头:
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.CopyTo(newWebsiteBindings,0);newWebsiteBindings=mco;mo.Properties["ServerBindings"].Value=newWebsiteBindings;mo.Put();}最初别忘了这个函数,它能够为网站绑定一个收集标识。
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;}注重的几点

平安。假如之用下面的那坨代码还不可。我想方设法想让其运转,但貌似无视了2件事变。会见WMI和IISmetabase。
ASP.NET在WindowsServer2003和IIS6.0上运转默许利用的是NETWORKSERVICE帐户。可是,我们仍是要利用客户端摹拟。
以是在Web.config中增加上面一个设置:
<identityimpersonate="true"/>利用了这个设置,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。

小妖女 发表于 2015-2-28 04:14:40

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

金色的骷髅 发表于 2015-3-9 20:51:38

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

若天明 发表于 2015-3-17 01:10:01

Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。

柔情似水 发表于 2015-3-23 13:30:11

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。
页: [1]
查看完整版本: ASP.NET教程之ASP.NET经由过程WMI创立站点增加假造目次和...