The code below produces a crash dump when I run it in Azure development fabric, but not when I deploy it to the cloud. I have:
- Followed Microsoft's instructions (see below)
- Tested the credentials in Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString by uploading a blob.
- Waited for it to crash (about ten times).
- Stopped the deployment and waited half an hour.
But I still cannot find anything in the storage account. I am targeting .Net 4 using VS 2010 Pro SP1 and deploying using its built-in stuff. What am I doing wrong?
public override void Run()
{
throw new ApplicationException("bugger");
}
public override bool OnStart()
{
ServicePointManager.DefaultConnectionLimit = 12;
DiagnosticMonitorConfiguration config = DiagnosticMonitor.GetDefaultInitialConfiguration();
string conn_str = RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
CloudStorageAccount account = CloudStorageAccount.Parse(conn_str);
DiagnosticMonitor diagnosticMonitor = DiagnosticMonitor.Start(account, config);
CrashDumps.EnableCollection(true);
return base.OnStart();
}
Here is my configuration:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzureProject1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WorkerRole name="WorkerRole1">
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
</WorkerRole>
</ServiceDefinition>
and
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="WindowsAzureProject1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
<Role name="WorkerRole1">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="AccountName=XXX;AccountKey=XXX;DefaultEndpointsProtocol=https" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>
(My real project does produce crash dumps, but I am having trouble analyzing them, which is why I am trying to produce a cut-down example. When that works I will see whether its crash dumps are any better.)
EDIT: Part of the solution is to add
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
which creates the wad-crash-dumps blob container, but unfortunately it remains empty. Also see my question about what happens to diagnostic data when a role fails.