从Classic ASP在IIS中创建虚拟目录

时间:2015-01-08 04:06:15

标签: iis asp-classic virtual-directory

我正在开发一个提供软件即服务的经典asp网站。此站点的潜在客户与我们联系,我们手动设置站点。我们希望尽可能自动化此过程。目前,我有一个表格,我的老板填写以存根数据库中的数据。该过程向我发送了一封电子邮件,我必须手动为该站点创建虚拟目录。

我想用经典ASP来设置它。我没有从GIS中找到非常好的结果。我找到了创建批处理文件或执行appcmd的东西。有人有这个成功吗?

现在我们的网址看起来像" https://www.somesite.com/CustomerName"。后来我想将其更改为" https://CustomerName.somesite.com"。在这方面的任何帮助也将不胜感激。

2 个答案:

答案 0 :(得分:3)

<强>概述

我只能想到两种方法可以从经典ASP中以编程方式修改IIS的配置。第一种是使用COM类(如ADSI或WMI)来操作配置。第二个将利用微软推出的新的ASP.Net类Microsoft.Web.Administration。 (为了完整起见,您也可以使用System.DirectoryServices,但这些类只是ADSI的托管包装。)


方法1 - 通过ADSI进行COM

我将首先讨论基于COM的解决方案,因为这种方法将涉及最少的开销。我将专注于ADSI,而不是WMI,因为那是我过去使用过的。可以使用ADSI add sites, vdirs, apps, etc

例如,要创建新网站,您可以使用CreateNewSite()

Dim myNewSiteID, oIIsWebServiceObj, oBindings 

oBindings = Array(0) 
Set oBindings(0) = providerObj.get("ServerBinding").SpawnInstance_() 
oBindings(0).IP = "192.168.1.1" 
oBindings(0).Port = "80" 
oBindings(0).Hostname = "yournewsite.example.com"

Set oIIsWebServiceObj = GetObject("IIS://MachineName/W3SVC")
myNewSiteID = oIIsWebServiceObj.CreateNewSite("NewSite", oBindings, _
       "C:\Sites\yournewsite")

要创建新的虚拟目录,您可以使用:

Dim IIsWebVDirRootObj, IIsWebVDirObj
Set IIsWebVDirRootObj = GetObject("IIS://localhost/W3SVC/1/Root") 
Set IIsWebVDirObj = IIsWebVDirRootObj.Create("IIsWebVirtualDir", "NewVDir") 
IIsWebVDirObj.Put "Path", "C:\NewContent"  
IIsWebVDirObj.Put "AccessRead", True 
IIsWebVDirObj.Put "AccessScript", True 
IIsWebVDirObj.SetInfo

我95%确定为了使用ADSI或WMI,您需要启用IIS6兼容性,因为这些COM对象会尝试操作配置数据库,哪些版本的IIS较新不再使用。要启用IIS6兼容性,see this MSDN page for IIS 7.5或此MSDN page for IIS8


方法2 - .Net通过Microsoft.Web.Administration

如果我以某种方式使用.Net,我会选择Microsoft.Web.Administration而不是System.DirectoryServices。无论你使用哪种.Net类,你都必须将它包装起来才能从经典的asp中使用它,因为没有本地方式可以调用.Net。为此,您需要在CCW中包装您编写的任何代码 - COM-Callable Wrapper。完全可以这样做,即你在.Net中编写所有代码,并实例化一个COM组件,它只是所有.Net代码的容器。我不打算详细介绍如何在CCW中包装.net代码,但您的CCW&.Net代码将如此简单:

ServerManager serverManager = new ServerManager();
Site mySite = serverManager.Sites.Add("NewSite", "C:\\Sites\\yournewsite", 80);
mySite.ServerAutoStart = true;
serverManager.CommitChanges();

有关如何使用CCW的更多信息,请参阅this MSDN article


最后......权限。

现在,更大的问题是:您正在以IUSR或IUSR_ MachineName 运行,或者某些限制帐户完全没有权限使用IIS的配置。无论如何,您必须获得更多许可。您可以use impersonation in classic asp,但另一种方法是change the identity that your application is running as。在您的情况下,由于绝对可怕,您需要以比IUSR更优惠的方式运行。

或者,只需关闭匿名身份验证,然后启用基本身份验证。然后,为将要对服务器进行身份验证的用户授予足够的权限,代码运行正常。

答案 1 :(得分:1)

以下是可能的步骤:

  1. 收集所有必需的数据(如应用程序/站点名称)以创建/配置新站点/应用程序。
  2. 使用System.DirectoryServices apis创建/配置新站点。 浏览this链接,了解有关如何在IIS6中创建/配置站点/应用程序的更多信息。
  3. 如果您使用的是IIS7,那么this文章将帮助您创建/配置新的网站/应用程序。