有关ASP.NET MVC应用程序执行的快速问题。
据我所知,MVC应用程序的项目被编译成DLL文件。在MVC应用程序环境中,是否有可执行程序链接在这些DLL中?是否有生成的程序本质上是使用DLL的MVC引擎,它位于服务器上并在域URL获取请求时被调用?
我可能错了,但这就是我脑海中想象的那样:)
答案 0 :(得分:6)
幕后有很多工作要做。在非常广泛的级别,对URL进行请求,服务器返回一个字符串。
到达那里是有趣的部分。
首先,有一个服务器设置。我们假设它正在使用IIS。 IIS公开了一个"默认应用程序"。可以通过服务器的IP地址访问此应用程序(通常通过防火墙进行端口转发)。
应用程序的信息保存在IIS中引用的文件夹中。该文件夹结构包含.dll,图像,脚本,.cshtml,配置文件等。共享应用程序名称的.dll
是启动应用程序的应用程序。在.dll
内部是asp.net MVC应用程序。
应用程序仅在应用程序池处于活动状态时运行。应用程序池仅在请求后的某个可变时间段内处于活动状态,如果它处于非活动状态,则请求必须等待池启动并启动应用程序。
启动应用程序意味着执行.dll
。这也将级联到执行相关的dll,具体取决于配置文件和参考设置。最后,我们来到asp.net MVC的起点。
asp.net mvc应用程序将首先实例化一个路由类,它是整个条目的基础。此路由类接受请求字符串,根据路由字典中的规则将其分解,然后使用反射来实例化相关控制器并调用相对方法。
一旦执行了action方法,它就会从调用中获取注入其中的参数并执行它所做的任何事情 - 命令pizza。服务器在订购披萨时会想到。订购后,该方法返回一个视图。该视图只是通过订购披萨来组成信息的一种方式。它仍在执行服务器端。视图完成后,以及从订购披萨方面传递的信息,整个返回值将写入响应流。
此时响应将在浏览器中呈现,任何发送的脚本都会被执行,并且希望在不久的将来将披萨放入烤箱。
http://www.dotnet-tricks.com/Content/images/mvc/ASP.NETMVC5Pipeline.png