IIS线程如何处理http请求&非http请求(后台作业)

时间:2015-09-18 15:59:25

标签: asp.net asp.net-mvc iis asp.net-mvc-5 iis-7.5

我有一个关于IIS如何处理Web应用程序请求的问题,主要针对asp.net mvc。 现在让我说我有以下动作方法,可以从用户浏览器调用: -

Public ActionResult Test (string test, string test2)
{
var a = context.singleOrDefault(a=>a.ID =test);
var b = context.Table.tolist();
a.Name="NewName";
var b = context.SingleOrDefault(a2=>a2.ID = test2)
b.status = "active";
context.SaveChanges();
return View();
}

现在,当用户按如下方式调用操作方法时: -

https://servername/controllername/Test?test=1&test2=2

这将是IIS执行方案??: -

  1. 其中一个可用的IIS线程将处理请求。
  2. 同一个线程将填充var a的值,并执行所有操作,保存更改&返回视图
  3. 将释放iis主题。
  4. 第二个问题。现在让我们说,而不是从浏览器调用此操作方法,我将及时从global.asax文件中调用此操作方法,如下所示: -

    public class MvcApplication : System.Web.HttpApplication
        {
            static void ScheduleTaskTrigger()
            {
                HttpRuntime.Cache.Add("ScheduledTaskTrigger",
                                      string.Empty,
                                      null,
                                      Cache.NoAbsoluteExpiration,
                                      TimeSpan.FromMinutes(10), 
                                      CacheItemPriority.NotRemovable,
                                      new CacheItemRemovedCallback(PerformScheduledTasks));
    
            }
    
    static void PerformScheduledTasks(string key, Object value, CacheItemRemovedReason reason)
            {
    
    
    
                HomeController h = new HomeController();
               var c = h.Test("1","2");// 
                ScheduleTaskTrigger();
            }
    

    所以在这种情况下IIS会参与动作方法执行吗?因为当我从global.asax调用动作方法时,不会有任何请求,所以这是否意味着iis不会得到受影响?换句话说,当我从global.asax调用一个动作方法时,不会占用任何IIS线程?或者因为Web应用程序是在IIS下部署的,所以后台工作也是如此。执行仍然会发生在IIS线程中吗?

1 个答案:

答案 0 :(得分:1)

如果从.NET代码中调用控制器的操作方法,则调用不会发送到IIS并返回到.NET。不涉及HTTP。它与调用任何其他.NET方法的任何.NET方法没有什么不同。