无法启动Azure Worker角色,异常代码0xe043352&;0xC0000035

本文关键字:0xe043352 代码 amp 0xC0000035 异常 启动 Azure Worker 角色 | 更新日期: 2023-09-27 18:21:46

在模拟器中本地运行时,web工作程序工作正常。然而,每当我更新在Azure VM上运行的web工作程序时,我都会在事件查看器中获得以下异常,并且角色不会启动:

应用程序:WaWorkerHost.exe
框架版本:v4.0.30319
描述:由于出现未处理的异常,进程已终止
异常信息:System.AggregateException
堆栈:位于System.Threading.Tasks.Task.Wait(Int32,System.Threading.CancellationToken)位于System.Threading.Tasks.Task.Wet()
在Foo.PushProcess.WorkerRole.Run()
位于Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal()位于Microsoft.WindowsAzure.ServiceRuntime.Elementation.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
报告Id:30631c5c-8a25-11e5-8066-0000d3a22f3ec
出现故障的程序包全名:
出现故障的程序包相关应用程序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);
    }
}

请注意,有些代码被省略了,但这些代码都是在初始化后运行的,理论上这个异常不会到达。

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

更新

我现在已经把我的代码简化到下面——这是一个网络工作者可能做到的最简单的事情——我仍然会遇到异常。我认为,要么是旧的工作进程正在被缓存,要么是部署过程中出现了问题。

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);
    }
}

无法启动Azure Worker角色,异常代码0xe043352&;0xC0000035

我试了一下,没能让它在我的一端重新编译。我有VS 2015 Enterprise(14.0.23107.0 D14REL),它来自我部署的MSDN Azure映像,运行.Net Fx 4.6版。我安装了Azure Tools和SDK 2.8。我使用.NET Fx 4.5.2创建了一个新的Azure云服务,并添加了一个工作角色。

我刚刚运行了一些稀疏代码模板,如下所示:

public class WorkerRole : RoleEntryPoint
{
    private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    private readonly ManualResetEvent runCompleteEvent = new ManualResetEvent(false);
    private CloudQueue _pushQueue;
    private CloudStorageAccount _storageAccount;
    public override void Run()
    {
        Trace.TraceInformation("WorkerRole1 is running");
        try
        {
            this.RunAsync(this.cancellationTokenSource.Token).Wait();
        }
        catch (Exception ex)
        {
            Trace.TraceError("[WORKER] Run error: " + ex);
        }
        finally
        {
            this.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 void CreatePushBroker()
    {
        return;
    }
    public override void OnStop()
    {
        Trace.TraceInformation("WorkerRole1 is stopping");
        this.cancellationTokenSource.Cancel();
        this.runCompleteEvent.WaitOne();
        base.OnStop();
        Trace.TraceInformation("WorkerRole1 has stopped");
    }
    private async Task RunAsync(CancellationToken cancellationToken)
    {
        // TODO: Replace the following with your own logic.
        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);
        }
    }
    private void ProcessItem(CloudQueueMessage message)
    {
        return;
    }
}

}

它在本地模拟器中运行时没有问题,我继续将它部署到美国西部,并在一个小型实例VM上启用了IntelliTrace,但有n个部署问题。它运行在WA-GUEST-OS-4.26_201511-0访客工人角色映像上,我能够RDP到机器中,我没有看到任何与代码或机器有关的问题。您是否有任何其他二进制文件可能没有包含在包中,或者可能存在一些未正确定义的依赖项,或者存储帐户命名问题?

这是我的部署日志。正如你所看到的,它花了大约7分钟,因为我让它从美国东部提取存储只是为了好玩:

凌晨1:11:25-警告:存在包验证警告。凌晨1:11:26-正在检查远程桌面证书。。。上午1:11:26-正在上传证书。。。上午1:11:42-应用诊断扩展。1:12:24 AM-准备AzureCloudService1的部署-2015年11月24日1:11:19 AM,订阅ID为"9a4715f5-acab8-4a18-8259-1c28b92XXXXX",使用服务管理URLhttps://management.core.windows.net/'。。。凌晨1:12:24-正在连接。。。凌晨1:12:24-正在验证存储帐户"ericgolestus"。。。凌晨1:12:24-正在上传包。。。凌晨1:12:28-正在创建。。。凌晨1:13:15-已创建部署ID:c5f26568707b46a3bd42466dd0bf7509。凌晨1:13:15-WorkerRole1角色的实例0正在创建虚拟机凌晨1:13:15-开始。。。凌晨1:13:32-正在初始化。。。凌晨1:14:36-WorkerRole1角色的实例0正在启动虚拟机凌晨1:16:11-WorkerRole1角色的实例0处于未知状态凌晨1:16:43-WorkerRole1角色的实例0正忙详细信息:正在启动角色。。。系统正在初始化。〔2015-11-2401:16:08Z〕上午1:19:50-WorkerRole1角色的实例0已准备就绪上午1:19:50-创建的web应用URL:http://quequetest.cloudapp.net/上午1:19:50-完成。

如果启用IntelliTrace,您是否可以获得更多详细信息,请告诉我们。

谨致问候,Eric

为了解决这个问题,我简单地删除了拥有工作者角色的原始云虚拟机实例,重新创建并重新发布了角色。从那一点来看,它运行得非常好。

我仍然无法确定是什么导致了错误,也没有任何其他员工角色出现过类似的问题。我在这里的假设是,VM存在配置问题,无法通过代码或Azure门户进行修改。