gpt4 book ai didi

iis - 从经典 ASP 在 IIS 中创建虚拟目录

转载 作者:行者123 更新时间:2023-12-04 21:57:52 28 4
gpt4 key购买 nike

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

我想使用经典 ASP 来设置它。我没有从 GIS 中找到很好的结果。我找到了有关创建批处理文件或执行 appcmd 的内容。有没有人在这方面取得成功?

现在我们的 URL 看起来像“https://www.somesite.com/CustomerName”。后来我想把它改成“https://CustomerName.somesite.com”之类的东西。在这方面的任何帮助也将不胜感激。

最佳答案

概览

我只能想到从经典 ASP 以编程方式修改 IIS 配置的两种方法。第一种是使用 COM 类(例如 ADSI 或 WMI)来操作配置。第二个将利用 Microsoft 引入的新 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 的 native 方式。为了做到这一点,您需要包装您在 CCW 中编写的任何代码 - a COM-Callable Wrapper .完全有可能以这样的方式执行此操作:在 .Net 中编写所有代码,然后实例化一个 COM 组件,该组件只是所有 .Net 代码的容器。我不会详细说明如何将 .net 代码包装在 CCW 中,但您的 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 更特权的方式运行。

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

关于iis - 从经典 ASP 在 IIS 中创建虚拟目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832748/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com