gpt4 book ai didi

azure - webrole onStart() 事件和 Application_Start() global.asax 事件有什么区别?

转载 作者:行者123 更新时间:2023-12-04 03:28:41 24 4
gpt4 key购买 nike

我刚刚开始接触 Azure 的技术细节,如果这是一个愚蠢的问题,我深表歉意。

如果我在 Visual Studio 中创建云服务项目并为 mvc 应用程序添加 webrole,则在 mvc 应用程序中我可以看到“WebRole.cs”文件。但是,当我以 MVC 应用程序作为起点,后来想要为 Azure 启用它时,通过右键单击该项目并选择“添加 Windows Azure 云服务项目”,不会创建 WebRole.cs。

那么我应该去哪里让 WebRole 的启动事件发生呢? Global.asax 文件的 Application_Start() 事件?

如果是这样,Global.asax 中的 Application_Start() 和 webrole 的 onStart() 方法有什么区别?

我找到了以下帖子,其中提供了部分解释: What starts first Application_Start or WebRole's OnStart?

因此,如果 WebRole 的 onStart 事件发生在 Global.asax 中的 Application_Start() 之前,如果我想在稍后启用的项目中的 onStart() 事件上运行一些代码,会发生什么情况适用于 Azure 的应用程序?

最佳答案

当没有类扩展 RoleEntryPoint Web 角色时 will run just fine ,只是没有运行额外的代码,而是运行 OnStart()Run()OnStop()

Application_Start() 与 Azure 完全无关,并且完全被 Azure 运行时忽略,它只是 ASP.NET 接线的一部分。您可以轻松地让 Application_Start() 无条件抛出异常,这不会阻止您的 Web 角色启动,只是所有 HTTP 请求都会失败。

请记住,从 SDK 1.3 开始,默认模式为“IIS 模式”,其中包含 RoleEntryPoint 后代的 Web 角色负载在一个进程 (WaIISHost.exe) 中运行,而 ASP.NET 代码在另一个过程。 RoleEntryPoint 的进程首先由 Azure 运行时启动,它运行 OnStart() 并在 Run() 中进入无限循环,然后实例为 HTTP 请求打开。如果您使用 IIS 7.5 并启用了“自动启动”,您可能会更早执行 Application_Start(),但否则在第一个请求到来之前不会执行 Application_Start() .

所以关键是有两个不同的进程在运行您的代码,每个进程都有自己的生命周期,这决定了您如何设计应用程序的限制。

RoleEntryPoint 后代类可以具有任何名称、属于任何命名空间并位于项目内的任何 .cs 文件中,该项目被选为 Web 角色的有效负载 - 这可能是您的ASP.NET 项目。在这些条件下,RoleEntryPoint 后代将由 Azure 运行时定位,并且其方法将作为角色实例生命周期的一部分运行。

关于azure - webrole onStart() 事件和 Application_Start() global.asax 事件有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16680007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com