【问题标题】:MVC3 request delay needed需要 MVC3 请求延迟
【发布时间】:2011-09-05 11:59:05
【问题描述】:

我有一个 MVC3 应用程序。我必须在一个 uri 请求中添加延迟。我知道最简单的方法是休眠,但是生产中的应用程序有大量请求,我担心让没有线程的 iis 响应其他请求。

我正在寻找解决方案的异步控制器/操作。

iis thead pool在“actionSync”方法中做thread.sleep更好吗?

我该如何解决这个延迟?也许是一个异步操作,它调用了一个新的 Web 服务,在里面执行 thread.sleep?

    AsyncManager.OutstandingOperations.Increment();
    DelayService delayService = new DelayService();
    delayService.GetDelayCompleted += (sender, e) =>
    {
        AsyncManager.Parameters["result"] = e.Value;
        AsyncManager.OutstandingOperations.Decrement();
    };
    newsService.GetDelayAsync(seconds);

在这种情况下,如果我将此 Web 服务部署到 mvc3 应用程序会影响 mvc3 应用程序的 iis 可用线程的同一 IIS 上?如果部署在不同的应用程序池中怎么办?

可以做什么?

【问题讨论】:

  • 为什么不做延迟客户端呢?
  • 我已经完成了,但这是一种不安全的方法,可以避免延迟或在延迟后发送请求。我的数据不断变化,在接受一个请求之前,我必须确保延迟完成,不多不少。这样,我必须接受延迟范围内的请求(我的延迟加上连接延迟),并且可以拒绝慢速连接。例如,如果我的延迟是 4,那么对于慢速连接或移动设备,最小值是 4,最大值可能是 7。为了避免黑客意图,我必须拒绝少于和多于 4 秒,对我来说最好的解决方案是在服务器中获得延迟。

标签: asp.net-mvc-3 c#-4.0 asynchronous long-polling


【解决方案1】:

你可以考虑使用微软发布的新的 ASP.NET MVC 4 bits 吗?

如果是这样,这可能是一个可能的解决方案:

public class TestController : AsyncController {
    public async Task<ActionResult> GetData() {
        await Task.Delay(5000);

        return Content("Done");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2021-01-08
    • 2013-11-17
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多