65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows 2000/XP Professional 上的多个虚拟 Web 服务器

2004 年 10 月 26 日

3分钟阅读

viewsIcon

47610

downloadIcon

301

Microsoft Windows Professional,无论是 2000 还是 XP,都只允许我们在 IIS 配置中维护一个网站。 如果你想要多个站点,你必须安装服务器版本的 Windows,或者看起来是这样。 这是一种使用 ADSI 和 WScript Host 创建和切换虚拟服务器的方法。

引言

我们中的许多人除了我们自己的爱好网站和我们为朋友做的事情之外,还为许多不同的公司工作。 这些项目中的每一个都可能需要它们自己的配置、虚拟目录或重叠的脚本文件。 作为一名开发人员,能够切换配置并创建模仿客户生产环境的文件夹结构至关重要。

为了完成这项任务,我们首先必须分析 Windows Professional 和服务器版本中 IIS 之间的区别。 真的有什么区别吗? 我不知道。 但我知道对虚拟服务器的限制是故意的,它分两部分实现。 1) 管理工具没有创建网站的选项。 2) 如果你尝试启动一个网站,而另一个网站处于活动状态,它会引发错误。

虽然有时你可能需要同时运行两个配置,并且对于这些情况,你需要安装一个“服务器”副本。 我正在写关于其余时间,当目标是拥有两个配置,你可以快速且轻松地在它们之间切换。

使用代码

第一步是能够在 IIS 中创建其他站点。 为此,我使用 ADSI IIS 对象,可以通过 GetObject 函数引用它,例如 GetObject("IIS:///w3svc")。 w3svc 对象是一个 COM 对象,它具有属性和方法,这些属性和方法可以反过来像任何其他对象一样返回对象。 该对象的方法之一是 Create。 我使用它来创建一个新站点,例如 Websvr.Create("IIsWebServer","2"),其中 Websvr 是从 GetObject 返回的对象,2 是新站点的序号,或者是计算机上已有的站点数量加 1。 代码中的最后一步是用 NewSite.SetInfo 保存你的更改。 其中 NewSite 是从 create 返回的对象。 此时,我们已经通过了 MMC 管理单元中缺少的命令。 你现在应该在 MMC 管理单元中看到新站点。 它将有一个停止标志而不是地球,但这只是因为它没有根目录。 现在可以通过图形界面设置该目录和所有其他设置。 你可以继续脚本来设置你想要的所有设置,但是一旦我们通过了不可能的事情,我就喜欢切换回 Windows。

但是,我想分享另一个有用的脚本。 站点设置完成后,你仍然无法同时运行两个站点。 从技术上讲,你可以每次想要切换时都打开 MMC,关闭活动站点并启动你想要的站点。 MMC 运行的方式需要太多的工作和时间。 所以我写了一个脚本,我把它保存在我的快速启动工具栏中,为我做切换。 我再次使用 ADSI 完成此任务。

  Dim websvr1, websvr2, websvr3, newSite, WhichSite
  WhichSite = inputBox("Which Site would you like to use?",
    "IIS site switch Utility","Chabad.org")
  Set Websvr1 = GetObject("IIS:///w3svc/1")
  Set Websvr2 = GetObject("IIS:///w3svc/2")
  Set Websvr3 = GetObject("IIS:///w3svc/3")
  
    Websvr1.stop
    Websvr2.stop
    Websvr3.stop
  Select Case lcase(WhichSite)
    Case "1", "local"
      Websvr1.start
      msgBox "The local-Default Web Site has been started."
    Case "2", "msdn"
      Websvr2.start
      msgBox "The MSDN Web Site has been started."
    Case "3", "codeproject"
      Websvr3.start
      msgBox "The CodeProject Web Site has been started."
    Case else
      MsgBox "Sorry we do not have a website set up with that name."
  End Select

我首先问我自己要打开哪个站点,然后我再次使用 GetObject 来获取对计算机上运行的每个站点的引用。 关闭所有这些站点。 最后打开我请求的站点。

如果你想把它制作成一个轻量级的应用程序(如果存在这样的东西),或者如果你想要一个下拉列表来选择,你可以只在 VB 6、VB.NET 或 C# 中实现相同的解决方案。

© . All rights reserved.