Требуется задержка запроса MVC3

У меня есть приложение MVC3. Я должен добавить задержку в один запрос uri. Я знаю, что самый простой способ сделать это - сон, но приложение в производстве имеет большое количество запросов, и я боюсь, что iis без потоков ответит на другой запрос.

Я смотрю на асинхронный контроллер/действие для решения.

Лучше ли для пула iis thead выполнять thread.sleep внутри метода «actionSync»?

Как я могу решить эту задержку? Может быть, асинхронное действие, которое вызывает новую веб-службу, внутри которой находится thread.sleep?

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

В этом случае, если я разверну эту веб-службу в том же IIS, что приложение mvc3 влияет на доступные потоки iis для приложения mvc3? что, если он развернут в другом пуле приложений?

Что я могу сделать?


person Fer    schedule 05.09.2011    source источник
comment
Почему бы вам не сделать задержку на стороне клиента?   -  person ZippyV    schedule 05.09.2011
comment
я уже сделал, но это небезопасный метод, и его можно избежать задержки или отправить запрос после задержки. Мои данные постоянно меняются, и прежде чем принять один запрос, я должен убедиться, что задержка выполнена, ни больше, ни меньше. Таким образом, я должен принимать запросы в диапазоне задержки (моя задержка плюс задержка соединения) и может отклонять медленные соединения. Например, если моя задержка равна 4, минимальное значение равно 4, а максимальное может быть 7 для медленных соединений или мобильных устройств. Чтобы избежать намерений взлома, я должен отклонять меньше и больше 4 секунд, и лучшее решение для меня - получить задержку на сервере.   -  person Fer    schedule 05.09.2011


Ответы (1)


Можете ли вы рассмотреть возможность использования новых битов ASP.NET MVC 4, выпущенных Microsoft?

Если это так, это может быть возможным решением:

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

        return Content("Done");
    }
}
person kidoman    schedule 20.09.2011