MVC 3部署到IIS6

时间:2011-03-17 21:12:31

标签: asp.net asp.net-mvc-3

最初,我部署了网站,其中一些DLL设置为复制本地(如另一个SO帖子中的haacked建议)。在此失败后,我在服务器上安装了MVC 3软件包。

当我点击我的网站时,我得到了:

  

目录列表拒绝此虚拟   目录不允许内容   被列出。

我看到了haacked's blog,但现在已经差不多3岁了,其中一些不再适用了。在服务器上安装MVC 3之后,有谁知道我们需要做些什么才能使它工作?

更新
我在haacked的博客上发现了另一个link。显然,这应该工作(不需要做通配符映射)。我的网站虚拟目录设置为运行ASP.NET 4.0.30319,我已经安装了ASP.NET MVC 3,我正在运行IIS6(Windows Server 2003 R2,非常确定是IIS6)。

4 个答案:

答案 0 :(得分:25)

虚拟目录设置为ASP.NET 4.0。而“默认网站”设置为运行ASP.NET 2.0。除了virt之外,我更改了“默认网站”以运行4.0。目录,它开始工作。原因对我来说是一个谜,但它确实有效。

答案 1 :(得分:22)

听起来你还没有设置通配符映射。您需要在IIS中配置映射,将所有请求发送到ASP.NET管道进行处理。由于您没有设置映射,因此它将请求解释为目录浏览(在您的配置中可能不允许)。

From Haacked

  1. 在网站的IIS属性中,单击“主目录”选项卡。
  2. 单击“配置...”按钮。在“映射”选项卡中,单击“插入...”
  3. “通配符应用程序映射”标签旁边的文本框中,键入“c:\ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi.dll”
  4. 取消选中标记为“验证文件是否存在”的复选框,然后单击“确定”

答案 2 :(得分:12)

我认为除非默认网站也设置为运行ASP.NET v4.0,否则ASP.NET 4 Extensionless URL功能不适用于iis v6上的虚拟目录。 对我来说,将ASP.NET v4.0设置为默认网站不是一种选择,因为它破坏了现有的v2.0虚拟目录webapps。 在mvc3虚拟目录webapp上添加通配符应用程序映射对我有用。 以下是我将mvc部署到iis6上的步骤列表。

  1. ASP.NET v4已安装在Windows 2003服务器上
  2. 安装AspNetMVC3Setup.exe
  3. 将mvc3 webapp文件复制到bin文件夹中没有mvc3 dll的服务器上
  4. 创建指向应用程序文件夹的虚拟目录
  5. 将ASP.NET版本设置为4.0.30319
  6. 将通配符应用程序映射添加到c:\ windows \ microsoft.net \ framework \ v4.0.30319 \ aspnet_isapi.dll并取消选中验证文件是否存在

答案 3 :(得分:0)

关于WILCARD应用程序地图请注意,此选项会导致IIS拦截对Web服务器发出的每个请求。这包括对图像,经典ASP页面和HTML页面的请求。因此,启用通配符脚本映射到ASP.NET确实会产生性能影响

其他解决方案:在带有IIS6的W2K3 SP2中,.NET Framework(2,3.5,4)。

转到注册表:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\ ASP.NET \ 4.0.30319.0

如果必要,请创建DWORD EnableExtensionlessUrls,其值为0

然后从命令窗口执行:resetiis

从MVC3模板创建ASP.NET应用程序。

现在在global.asax设置路线如:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    //routes.MapRoute(
    //    "Default", // Route name
    //    "{controller}.mvc/{action}/{id}", // URL with parameters
    //    new { controller = "Home", action = "Index", id = "" } // Parameter defaults
    //);

    routes.MapRoute(
            "Default",
            "{controller}.aspx/{action}/{id}",
            new { action = "Index", id = "" }
          );

    routes.MapRoute(
      "Root",
      "",
      new { controller = "Home", action = "About", id = "" }
    );
}

为.NET Framework 4创建AppPool并设置Web应用程序以使用此apppool。您可以使用Denis Bauer的ASP.NET版本切换器或使用Aspnet_regiis.exe。

结果:浏览器将de About页面显示为默认页面。