【问题标题】:ASP.NET MVC and httpRuntime executionTimeoutASP.NET MVC 和 httpRuntime executionTimeout
【发布时间】:2010-10-04 06:56:12
【问题描述】:

我想为 ASP.NET MVC 应用程序的一个小节增加 httpRuntime executionTimeout

在常规的 Web 应用程序中,您可以使用:

<configuration>
  <location path="UploadPage.aspx">
    <httpRuntime executionTimeout="600"/>
  </location>
</configuration>

但是 ASP.NET MVC 中确实没有“文件夹”的概念,那么我将如何去做呢?

假设 ASP.NET MVC 路径是 /Images/Upload,带有 ImagesController 和 Upload Action。

【问题讨论】:

    标签: asp.net asp.net-mvc configuration timeout httpruntime


    【解决方案1】:

    您可以在 标记的路径属性中包含整个 MVC 路径(控制器和操作)。像这样的东西应该可以工作:

    <location path="Images/Upload">
        <system.web>
            <httpRuntime executionTimeout="600" />
        </system.web>
    </location>
    

    【讨论】:

    • 我仍然无法完成这项工作...澄清一下:路径是相对于网站的根目录还是应用程序?另外,如果在 url 中传递了任何值,这会失败吗? (例如:图片/上传/1)
    • 它与网站的根目录有关,但我认为您可能对 url 上的附加值不走运。 ASP.NET 严格解释路径并且不允许使用通配符。 2 个想法:(a) 使用 QueryString。
    • (b) 创建一个实际的 Images/Upload 文件夹,并在其中放置一个 web.config。设置 path="" 应用到整个文件夹。不确定 ASP.NET 是否会正确解释 MVC 应用程序,但它肯定适用于普通 ASP.NET 应用程序。
    • 请注意,如果调试模式开启msdn.microsoft.com/en-us/library/vstudio/…executionTimeout 可选 Int32 属性,则此操作将被忽略。指定请求在被 ASP.NET 自动关闭之前允许执行的最大秒数。仅当编译元素中的调试属性为 False 时,此超时才适用。因此,如果 debug 属性为 True,则不必将此属性设置为很大的值,以避免在调试时关闭应用程序。
    • 好点。这是一个很大的问题,因为在调试模式下一切正常。然后你去部署,它因未知原因而爆炸,错误消息很差。
    【解决方案2】:

    Chris Hynes solution 有效!请确保不要在路径中包含 ~/。

    This answer 以另一种方式详细说明 - 只需在您的操作代码中设置 ScriptTimeout

    public ActionResult NoTimeout()
    {
        HttpContext.Server.ScriptTimeout = 60 * 10; // Ten minutes..
        System.Threading.Thread.Sleep(1000 * 60 * 5); // Five minutes..
        return Content("NoTimeout complete", "text/plain"); // This will return..
    }
    

    【讨论】:

    • 我不认为 Server.ScriptTimeout 方式有效。我清楚地记得尝试过但没有让它发挥作用。
    • 啊,这是在我们的测试层中检查并工作的内容,然后才回到 web.config 版本,老板 :)
    • 似乎在使用~/时,ASP.NET将其映射到物理路径。使用“控制器/动作”时不会发生这种情况;它是从应用程序根映射的。是的,不要问我为什么——我什至研究了 Reflector 来尝试解决这个问题,但配置内容很痛苦。
    • 这项技术对我不起作用。我需要在 web.config 中设置 executionTimeout。
    【解决方案3】:

    如果动作在默认控制器中,则 home/upload 不起作用,您只需输入动作名称。

    【讨论】:

      【解决方案4】:

      我注意到您正在专门尝试增加上传页面的超时时间。我在名为 plupload 的“分块”上传器上取得了一些成功。可以设置一个相对简单的 MVC 操作来接收上传的块,并在收到每个块时附加它。使用小块,您无需增加超时。当然可能会有一些浏览器限制,但是n

      http://plupload.com/

      【讨论】:

        【解决方案5】:

        看看一个 AsyncController,如果你使用它,你将有可能在一个动作方法上设置一个 AsyncTimeout 属性,这样你就可以使请求超时。

        对我有帮助的链接: http://forums.asp.net/p/1564303/3922462.aspx http://dariosantarelli.wordpress.com/2010/10/16/asp-net-mvc-2-handling-timeouts-in-asynchronous-controllers/

        【讨论】:

        • 这不会像 OP 想要的那样增加超时。运行时将在异步超时发生之前超时。
        猜你喜欢
        • 2011-05-28
        • 2011-04-29
        • 1970-01-01
        • 2014-07-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 2014-01-20
        相关资源
        最近更新 更多