|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
效率会有不少的变化。而实际上java是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。媒介本文先容了ASP.NET怎样经由过程WMI创立站点、增加假造目次和增加主机头。而且已在WindowsServer2003及IIS6的情况下测试经由过程。这玩艺儿花了老子3地利间才弄定,用了几个小时写代码,并且傍边还花了很多工夫办理Win32:Accessdeniederror的成绩。固然我要指出的是,不管NETWORKSERVER帐户仍是IUSR_<servername>帐户都不要设置过年夜的权限。关于WMI和IISmetabase的平安机理,我仍是一窍不通的。我只不外办理成绩罢了。
看代码
起首要从Internet信息服务(IIS)办理器中猎取网站标识符,点击“网站”根节点,右边“标识符”显现的就是网站的ID。默许网站的标识符一般是1。
猎取网站标识的功效,我们要用到一个namespace,代码以下:下文一切’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[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;}
复制代码
创立一个假造目次:- 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.Length+1];websiteBindings.CopyTo(newWebsiteBindings,0);newWebsiteBindings[newWebsiteBindings.Length-1]=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;}
复制代码
- [/code][size=3][b]注重的几点[/b][/size]
- 平安。假如之用下面的那坨代码还不可。我想方设法想让其运转,但貌似无视了2件事变。会见[color=#335533]WMI[/color]和IISmetabase。
- ASP.NET在WindowsServer2003和IIS6.0上运转默许利用的是NETWORKSERVICE帐户。可是,我们仍是要利用客户端摹拟。
- 以是在Web.config中增加上面一个设置:
- [quote][code]<identityimpersonate="true"/>
复制代码 [/quote][code][/code]利用了这个设置,IUSR_<servername>会利用客户端摹拟的体例往会见IISmetabase。在前面的文章里,我就用IUSR_来暗示这个帐户。不要健忘,在IUSR_前面加上你的服务器称号才是这个帐户的名字。
WMI权限设置
- 把持面板–>办理工具–>盘算机办理–>服务和使用程序。
- 右键WMI把持,点击“属性”。
- 选择“平安”选项卡。
- 睁开Root树
- 点击MicrosoftIISv2。
- 点击“平安设置”。
- 点击“初级”。
- 双击IUSR_(假如“组或用户称号”内里没有的话,就把它增加出来)
- 把IUSR_“使用到”设置成“这个称号控件和子称号空间”
- “同意”一切权限。
- 一切窗口都点击“断定”。
IISmetabase权限设置
- 下载并安装IIS6ResourceKit。
- 运转MetaBaseExplorer(在入手下手菜单的IISResourceKit中能够找到)。
- 睁开树形目次,右键第一个或第二个节点而且选择“Permissions”。
- 假如提醒你“Thecurrentkeyinheritsitssecuritypermissionsfromthekey/”,点击“是”。
- 选择“IIS_IUSRS”,假如没有的话,把它增加出来。
- 选择“FullControl”。
- 一切窗口都点击“断定”。
有了充足的权限就可以运转了。
假如有高人能对这个办法谈谈本人的感受,而且能指出更好的设置IIS和WMI的办法,那就更赞了。记得之前,我都是本人捣鼓出来的,以是我不晓得这个办法是否是最好的计划。
假如你在运转代码的时分碰着任何成绩,我乐意效力。
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。 |
|