无法启动Azure辅助角色,异常代码0xe0434352& 0xC0000035

时间:2015-11-13 17:14:25

标签: c# azure azure-worker-roles

在模拟器中本地运行时,Web worker工作正常。但是,每当我更新在Azure VM上运行的Web工作器时,我在事件查看器中都会遇到以下异常异常,并且角色将无法启动:

  

应用程序:WaWorkerHost.exe
  框架版本:v4.0.30319
  描述:由于未处理的异常,该过程终止   异常信息:System.AggregateException
  堆:      在System.Threading.Tasks.Task.Wait(Int32,System.Threading.CancellationToken)      在System.Threading.Tasks.Task.Wait()
     在Foo.PushProcess.WorkerRole.Run()
     在Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal()      在Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__2()      在System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)
     在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object,Boolean)
     在System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)
     在System.Threading.ThreadHelper.ThreadStart()

     

内部异常:任务被取消。

  

错误应用程序名称:WaWorkerHost.exe,版本:2.6.1198.712,时间戳:0x54eba731
  错误模块名称:KERNELBASE.dll,版本:6.3.9600.17415,时间戳:0x54505737
  例外代码:0xe0434352
  故障偏移:0x0000000000008b9c
  错误进程id:0xfb8
  故障应用程序启动时间:0x01d11e3128981a5d
  错误的应用程序路径:E:\ base \ x64 \ WaWorkerHost.exe
  错误模块路径:D:\ Windows \ system32 \ KERNELBASE.dll
  报告编号:30631c5c-8a25-11e5-80c6-000d3a22f3ec
  错误包全名:
  错误的包相关应用程序ID:

  

会话“MA_ETWSESSION_WAD_415df88f8a0447178dbd4c18f1349f0e_Foo.PushProcess_Foo.PushProcess_IN_0”无法启动并出现以下错误:0xC0000035

这是相关代码:

public override void Run()
{
    Trace.TraceInformation("Foo.PushProcess is running");

    try
    {
        RunAsync(_cancellationTokenSource.Token).Wait(); // This is where the exceptions point to
    }
    catch (Exception ex)
    {
        Trace.TraceError("[WORKER] Run error: " + ex);
    }
    finally
    {
        _runCompleteEvent.Set();
    }
}

public override bool OnStart()
{
    // Set the maximum number of concurrent connections
    ServicePointManager.DefaultConnectionLimit = 12;

    // For information on handling configuration changes
    // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

    bool result = base.OnStart();

    _storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"));
    var queueClient = _storageAccount.CreateCloudQueueClient();
    _pushQueue = queueClient.GetQueueReference("pushes");
    _pushQueue.CreateIfNotExists();

    CreatePushBroker();

    Trace.TraceInformation("Foo.PushProcess has been started");

    return result;
}

private async Task RunAsync(CancellationToken cancellationToken)
{
    while (!cancellationToken.IsCancellationRequested)
    {
        Trace.TraceInformation("Working");
        CloudQueueMessage message = null;
        try
        {
            message = _pushQueue.GetMessage();
            if (message != null)
            {
                ProcessItem(message);
            }
        }
        catch (Exception ex)
        {
            if (message != null && message.DequeueCount > 5)
                _pushQueue.DeleteMessage(message);

            Trace.TraceError("[WORKER] Retrieval Failure: " + ex);
        }

        await Task.Delay(1000, cancellationToken);
    }
}

请注意,某些代码已被省略,但这些代码都是在初始化之后运行的,理论上并未达到此异常。

我完全不知道可能导致这个问题的原因。任何帮助将不胜感激 - 即使只是为了帮助我获得一个有用的例外。

更新

我现在已将代码缩减到下面 - 它就像web worker一样简单 - 而且我仍然得到例外。我相信旧工作者正在被缓存,或者部署过程中存在问题。

public override void Run()
{
    Trace.TraceInformation("Foo.PushProcess is running");

    try
    {
        RunAsync(_cancellationTokenSource.Token).Wait(); // This is where the exceptions point to
    }
    catch (Exception ex)
    {
        Trace.TraceError("[WORKER] Run error: " + ex);
    }
    finally
    {
        _runCompleteEvent.Set();
    }
}

public override bool OnStart()
{
    // Set the maximum number of concurrent connections
    ServicePointManager.DefaultConnectionLimit = 12;

    // For information on handling configuration changes
    // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

    bool result = base.OnStart();

    return result;
}

private async Task RunAsync(CancellationToken cancellationToken)
{
    while (!cancellationToken.IsCancellationRequested)
    {
        Trace.TraceInformation("Working");

        // code removed for testing - no work is being done.

        await Task.Delay(1000, cancellationToken);
    }
}

1 个答案:

答案 0 :(得分:0)

要解决此问题,我只需删除拥有辅助角色的原始Cloud VM实例,重新创建并重新发布该角色。从那时起,它的工作非常好。

我仍然无法确定导致错误的原因,并且没有任何其他问题与任何其他工作人员角色。我的假设是VM存在配置问题,无法通过代码或Azure门户进行修改。