【发布时间】:2015-09-18 15:59:24
【问题描述】:
我有一个关于 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();
}
现在当用户调用action方法如下:-
https://servername/controllername/Test?test=1&test2=2
这会是 IIS 执行场景吗??:-
- 一个可用的 IIS 线程将处理该请求。
- 同一线程将填充 var a 的值,并执行所有操作,保存更改并返回视图
- iis 线程将被释放。
第二个问题。现在让我们说,而不是从浏览器调用此操作方法,我会及时从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 是否会参与 action 方法的执行?因为当我从 global.asax 调用 action 方法时不会有任何请求,那么这是否意味着 iis 不会受到影响?换句话说,当我从global.asax 调用操作方法时,不会占用 IIS 线程?还是因为 Web 应用程序部署在 IIS 下,所以后台作业的执行仍然会发生在 IIS 线程内?
【问题讨论】:
-
如果您从
global.asax调用操作方法来执行任务,您就是在滥用 MVC 架构。从您的其他问题中我可以看出,您正在使用 Hangfire。坚持使用该技术或类似技术来完成您的后台工作。不要重新发明轮子。 -
@mason 不,我在这里问不同的事情,我不是想用挂火或调度工具代替它!我只是想知道在没有http请求的情况下调用任何方法是否会通过iis完成?这是完全不同的问题..
标签: asp.net asp.net-mvc iis asp.net-mvc-5 iis-7.5