无法将ASP MVC应用程序部署到普通的共享托管服务提供商

时间:2009-10-02 18:03:05

标签: c# asp.net-mvc asp.net-mvc-2

我从fasthosts.co.uk购买了Windows Developer托管软件包,我相信这是一个标准的共享托管软件包。它有ASP.NET 3.5,并且根据他们的支持,还安装了SP1。

我使用ASP MVC 2预览1开发了我的网络应用程序(顺便说一下,这很棒,我很期待陷入预览2)并且它在我的开发机器上工作正常,我有预览2通过安装程序包安装。

由于服务器没有安装MVC,我跟着 Phil Haacks bin deployment method没有接缝可以发生以下情况......

当我部署它并将文件复制到服务器时,我得到一个简单无用的“服务器错误500 - 内部服务器错误”。所以我修改了我的web配置,以便customErrors mode =“Off”,这没有任何区别所以我发现正在发生的事情正在阻止它甚至到达customErrors位。

然后我继续取出网络配置的一些内容,直到它给了我一个体面的错误消息。我发现如果从配置中取出以下位,它只会给我一个错误信息 -

  • 整个configSections部分
  • 整个httpHandlers部分
  • 整个system.codedom部分
  • 系统的处理程序和defaultDocument部分。 webServer部分

我正在使用MVC生成的标准Web配置,除了我自己的连接字符串之外没有任何更改 - 我已经为此测试选择了。

现在我得到它给我一个错误消息,我得到“无法加载文件或程序集System.Web.Mvc ...”消息,我被卡住了! - 有什么建议吗?

修改

我和其他人一起买了一个新的托管包,一切都运行良好!当我部署一个空的MVC应用程序时,我确信这是Fasthosts的错,感谢Phils的建议,然后是一个空的普通网络表单应用程序 - 他们都给出了相同的错误。

我目前正在试图说服他们这是他们的错,但是他们一直向我保证问题出在我的网络配置上。试图取消我的主机,但我显然是在12个月的合同中,即使我选择每月付款 - 哦。

我想不要使用Fasthosts将是一件可以带走的事情。

6 个答案:

答案 0 :(得分:2)

听起来你可能没有部署到webroot。是这样的吗?尝试部署一个空的MVC项目。

答案 1 :(得分:2)

我知道这已经过时但我在尝试在Fasthosts共享托管平台上设置MVC 5网站时发现了这个Q& A.我最终使用它的方法是将runAllManagedModulesForAllRequests="true"添加到我的 web.config 中,例如:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthenticationModule" />
    </modules>
  </system.webServer>

这一切都很棒!

更新事实证明这有点像用大锤破解坚果并且可能会影响性能。 Colin Farr正确地指出,通过修改web.config的模块部分可以更优雅地解决这个问题:

    <modules>
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
      <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
    </modules>

答案 2 :(得分:1)

发生错误是因为快速主机不允许配置部分的system.webserver部分与webserver进行交互(Very Annoying)。我有一个MVC网站部署到一个快速主机帐户,它部分工作...你可以查看索引页面,但路由不起作用。要消除错误,只需注释掉system.webserver部分。我一直无法使用.aspx或.mvc扩展来使用路由:(

答案 3 :(得分:1)

我的MVC网站工作原理如下:

我将aspx扩展添加到我的默认路由映射:

  routes.MapRoute(
            "Default", // Route name
            "{controller}.aspx/{action}/{id}", // URL with parameters
            new { controller = "Front", action = "Default", id = UrlParameter.Optional }
        );

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

我不认为Root实际上有效,因为我得到了403,'没有目录列表'错误,所以我在网站上添加了一个default.aspx页面,它只是在OnInit中重定向到“〜/ Front。 aspx / Default“(请注意我的默认控制器重命名为Front而不是Home)。

我将三个Mvc dll更改为Copy Local,以便将它们部署到我站点的bin目录中。

我将HtmlAction用于所有页面链接,以便它们自动获得aspx扩展名。

我注意到网站在初始加载时比使用网页表格慢,但除此之外一切似乎都没问题。

答案 4 :(得分:0)

仔细检查你的Global.asax和代码隐藏...我认为当应用程序甚至无法启动时会发生这种错误(因此除了500之外你没有其他错误)。

您是否尝试过放入一个简单的,独立的ASPX页面,没有代码隐藏或任何东西?如果是这样,你会得到同样的错误吗?如果是这样,我认为没有为您的虚拟目录配置ASP.NET 3.5,并且您必须要求技术支持重新安装/修复或在IIS虚拟目录属性的ASP.NET选项卡中设置版本。 / p>

答案 5 :(得分:-1)

您需要服务器上的ASP.Net MVC 2 dll。在项目中,选择属性下的dll,将“Copy Local”更改为true。