在我尝试清除的过程中,DiagnosticMonitorConfiguration
我尝试了以下方法:
- 重启(唯一)webrole 实例
- 重新启动 IIS 应用程序池(通过 RDP => IIS 管理器)
- 重新部署了网络角色
- 修改 global.asax 代码 => 重新部署
DirectoryConfiguration
但是我仍然在 DiagnosticMonitorConfiguration 的目录数据源中看到了额外的成员副本。这些额外的副本是在Application_Start()
每次 IIS 线程退役(20 分钟空闲时间)时调用 global.asax 时意外添加的。我已经复制粘贴了 BUGGY 代码,显示了它们是如何添加的(最终我得到了一个例外,例如OverallQuotaInMB is 150MB but sum of requested sub-quotas is 850MB
)。
问题:我明白为什么会有重复。但是,尽管尝试了上述项目符号列表中的操作,但为什么 DiagnosticMonitorConfiguration 没有被清除?它的状态究竟是如何被持久化的?我只能认为它必须是 Azure 表或 Azure SQL - 但这只是一个猜测。
// called from global.asax's Application_Start()
public bool Initialize()
{
RoleInstanceDiagnosticManager roleInstanceDiagnosticManager = getRoleInstanceDiagnosticManager();
config = roleInstanceDiagnosticManager.GetCurrentConfiguration();
if (config == null)
config = DiagnosticMonitor.GetDefaultInitialConfiguration();
LocalResource localResource = RoleEnvironment.GetLocalResource("MyAppLogFolder");
DirectoryConfiguration dirConfig = new DirectoryConfiguration();
dirConfig.Container = "myapplog-blob";
dirConfig.DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes;
dirConfig.Path = localResource.RootPath;
// This is a BUG, keeps adding duplicate entries
config.Directories.DataSources.Add(dirConfig);
limitOtherDefaultDirSizes(config); // limits overall quota to 150MB
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(10.0);
roleInstanceDiagnosticManager.SetCurrentConfiguration(config);
return true;
}
远程调试显示 DiagnosticMonitorConfiguration 数据结构如下。你可以清楚地看到这里的重复,保证例外。
- config {Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorConfiguration}
- Directories {Microsoft.WindowsAzure.Diagnostics.DirectoriesBufferConfiguration}
- DataSources Count = 85 System.Collections.Generic.IList<Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration>
+ [0] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
+ [1] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
+ [2] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
- [3] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
Container "myapplog-blob" string
DirectoryQuotaInMB 10 int
Path "C:\\Resources\\directory\\73c8a6bf9a5e434ab3d0c44034e7b7e9.MyAPP.API.MyAppLogFolder\\" string
- [4] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
Container "myapplog-blob" string
DirectoryQuotaInMB 10 int
Path "C:\\Resources\\directory\\73c8a6bf9a5e434ab3d0c44034e7b7e9.MyAPP.API.MyAppLogFolder\\" string
+ [5] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}
...
+ [84] {Microsoft.WindowsAzure.Diagnostics.DirectoryConfiguration}