我正在开发一个提供软件即服务的经典asp网站。此站点的潜在客户与我们联系,我们手动设置站点。我们希望尽可能自动化此过程。目前,我有一个表格,我的老板填写以存根数据库中的数据。该过程向我发送了一封电子邮件,我必须手动为该站点创建虚拟目录。
我想用经典ASP来设置它。我没有从GIS中找到非常好的结果。我找到了创建批处理文件或执行appcmd的东西。有人有这个成功吗?
现在我们的网址看起来像" https://www.somesite.com/CustomerName"。后来我想将其更改为" https://CustomerName.somesite.com"。在这方面的任何帮助也将不胜感激。
答案 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)