为什么可以';使用RoleEntryPoint时访问Application_Start中的RoleEnvironm
本文关键字:Application 访问 Start RoleEnvironm 中的 RoleEntryPoint 使用 为什么 | 更新日期: 2023-09-27 18:29:28
我有一个Azure WebRole,我正在尝试为使用DiagnosticMonitor配置日志记录。
根据windowsazure.com上的文档,日志记录应该在OnStart:中实现
Note: The code in the following steps is typically added to the OnStart method of the role.
https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/
为了访问OnStart方法,我必须定义一个RoleEntryPoint。但一旦定义了它,我就无法访问web应用程序Application_Start中的RoleEnvironment。
如何在仍然能够使用DiagnosticMonitor的情况下使RoleEnvironment可用于应用程序?
我将应用程序连接字符串存储在服务配置中。
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
// config
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
LocalResource localResource = RoleEnvironment.GetLocalResource("MyCustomLogs");
DirectoryConfiguration dirConfig = new DirectoryConfiguration();
dirConfig.Container = "wad-mycustomlogs-container";
dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
dirConfig.Path = localResource.RootPath;
DiagnosticMonitorConfiguration diagMonitorConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
diagMonitorConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);
diagMonitorConfig.Directories.DataSources.Add(dirConfig);
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
return base.OnStart();
}
我已经解决了。
在清理了我的解决方案、重建、重新启动IIS、关闭azure模拟器并重新启动Visual Studio之后,它突然开始工作了。
我根本没有更改任何代码。
(我甚至在发布之前也做了所有这些事情,但只有当我同时做了所有事情时,它才起作用)
这无疑是一组正确的代码示例。你需要在角色中设置所有这些,尽管不在你的web应用程序中。
注意:由于Azure现在有完整的IIS,RoleEntryPoint On_start和Web应用程序之间的上下文不同,Web应用程序在IIS中自己的工作池中运行。
只是一个快速的理智检查表:
- 您正在编写的代码在从RoleEntryPoint继承的类中(通常WebRole.cs不在Global.asax中)
- 您正在Azure Emulator中运行该项目(不是无意中直接启动了web项目吗?)
如果您在Azure模拟器中运行应用程序或部署到Azure本身,则只要您具有相关DLL引用,就可以从IIS应用程序中使用RoleEnvironment。如果您可以使用代码中可用的RoleEnvironment.Is进行构建,则库将包含在内。我唯一能想到的是,你是直接运行网站,而不是在Azure模拟器中。
将云项目设置为您在Visual Studio中的启动,您应该是黄金级的。