2011-09-05 128 views
2

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

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

对于iis thead池来说,执行“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影响IIS可用线程的应用程序MVC3相同的IIS?如果部署在不同的应用程序池中呢?

什么是ido?

+0

你为什么不这样做延迟客户端? – ZippyV

+0

我已经做了,但是不安全的方法,可以避免延迟或延迟后发送请求。我的数据处于连续变化之中,在接受一个请求之前,我必须确保延迟完成,不多不少。这样我就必须接受延迟范围内的请求(我的延迟加上连接延迟),并且可以拒绝慢速连接。例如,如果我的延迟为4,则最小值为4,最大值可能为7,适用于连接速度较慢或移动。为了避免黑客意图,我必须拒绝少于4秒的时间,对我来说最好的解决方案就是在服务器中获得延迟。 – Fer

回答

0

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

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

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

     return Content("Done"); 
    } 
}