IIS 7:为每个主机名启动唯一的站点实例

是否可以configurationIIS 7,以便具有多个绑定(或通配符绑定)的单个站点将为每个唯一的主机名启动一个唯一的实例?

为了解释为什么这是可取的,我们有一个应用程序从远程系统检索其configuration。 应用程序的行为由此configurationpipe理,而不是由“web.config”pipe理。 应用程序使用其主机名作为密钥来检索configuration。 目前,为应用程序的每个实例创build一个完全相同的IIS站点是一个手动过程,不同之处仅在于绑定。

我认为,如果可能的话,那就是有一个IIS站点可以有效地作为任意数量的dynamic站点的模板。 每当用一个唯一的主机名访问它时,一个新的站点实例将被启动,并且对该主机名的所有进一步的请求将会到达该实例,就像我手动创build站点一样。

我经常使用IIS,但仅用于相当简单的站点托pipe。 我想知道这是否可以configuration与香草IIS 7,但也欢迎需要插件或第三方产品的答案。

有关应用程序更改的编程/体系结构build议对于serverfault并不适合。

从我对IIS如何工作的理解,我可以说这是不可能的。

Windows进程激活服务WAS位于内核中的http.sys和运行应用程序池/站点的各种工作进程之间。

根据现有文件(ApplicationHost.Config / web.config)中的configuration,它决定将传入请求路由到哪里。 如果尚未运行,它可以启动现有的ApplicationPool,但不能基于Web请求创build新的站点。

您可以将自己的扩展插入到请求处理pipe道中,但是我认为只要请求已经触发了您的工作进程,而不是之前。

你可以编写自己的ServiceHost作为WAS的替代品,但我想这不是一个小任务。

我会开始使用脚本来创build您的网站的新实例,传递variables。 您可以轻松地为您的所有不同configuration创build数百个网站。

如果它必须更具dynamic性,那么可以在Web应用程序中添加一个function,以检测是否需要一个新站点,它将显示“在30秒内回来”页面,并向Windows服务发送消息以创build一个新的现场。 新的网站应该在几秒钟内,然后可以回答新的要求。

你有几个select。 首先,当你说“应用程序使用其主机名作为密钥来检索configuration”时,我想要确保正确理解。 通过“主机名”,你是指IIS的网站名称,还是域名(通常称为主机名)? 我假设你的意思是IIS网站的名称,因为你正在为每个唯一的域名申请一个独特的IIS站点。

URL重写提供了很大的灵活性,以便您可以随意覆盖或创build服务器variables,所以如果可能的话,如果您可以使用除了IIS站点名称以外的其他应用程序设置,那么它将更容易。 但是…你并没有要求提供编程/ archicturial的变化,所以我会回来专门回答你的问题。 我只是想我会提到,如果你没有考虑到URL Rewrite提供的灵活性。

我会处理你所要求的方式是build立一个名为“Catch-all”的站点,它具有IP的通配符绑定。 该网站应该有一个URL重写规则,以确保所有请求(不pipeURL)访问一个createsite.aspx页面。 createdite.aspx页面应该采用域名(Request.ServerVariables(“HTTP_HOST”))并让它创build站点并指向共享文件夹。 使用Microsoft.Web.Administration来创build站点,并确保该站点的应用程序池在IIS框上具有pipe理员身份。 以下是如何创build该网站( http://blogs.msdn.com/b/carlosag/archive/2006/04/17/microsoftwebadministration.aspx )。

当网站被创build时,它应该为新的域名添加主机头绑定。 这样,随后对该域名的请求将始终被新网站捕获,而不是捕获所有网站。 换句话说,全部网站只在第一次使用特定域名时使用。

最后,createsiteite.aspx页面应该做一个response.redirect回到原始的URL,包括通过完整的path和查询string。 terminal用户不会意识到发生了什么事情,除非暂时停下来,如果他们碰巧正在看小提琴,那么他们就会redirect。