【发布时间】:2017-01-28 13:45:01
【问题描述】:
此问题于 2017 年 1 月 24 日星期二开始发生。在此之前,我从未遇到过工人角色回收问题。
美国东部标准时间晚上 9 点左右,我的工作角色进入忙碌状态。 CPU 达到 90%。它会保持这种状态超过 10 个小时。它从一个角色开始,然后传播到其他角色。我的软件白天运行良好。我的工人角色使用标准的 A0 超小尺寸。我尝试将尺寸增加到小标准 A1,但错误仍然存在。
我的代码是 StorageConnectionString。我运行了一个调试器,我只看到过一次这个错误:
System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理
附加信息:已成功与服务器建立连接,但在登录前握手期间发生错误。 (提供者:TCP Provider,错误:0 - 现有连接被远程主机强行关闭。)
这导致异常并且角色停止。不过,我再也没有见过它。
我必须将我的站点部署到登台服务器,停止生产服务器,然后单击交换以使其工作。当天晚些时候,它在晚上 9 点再次中断。
当我的角色很忙时,我收到以下错误:
忙(稳定角色... [01/28T13:28Z]角色将回收。上次 OnRoleRun 正常返回。上次退出时间:
我在事件日志中做了远程桌面。这是我收到的错误:
WaWorkerHost 加载角色程序集失败:XX.TaskRole,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null
这是我的工人角色代码:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Diagnostics;
using System.Net;
using System.Threading;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Queue;
using Microsoft.Azure;
namespace XX.TaskRole
{
public class WorkerRole : RoleEntryPoint
{
string conString = ConfigurationManager.ConnectionStrings["XX"].ConnectionString;
CloudQueue queue;
public WorkerRole()
{
ServicePointManager.DefaultConnectionLimit = 12;
}
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
while (true)
{
GetTasks();
Thread.Sleep(30000);
Trace.TraceInformation("Working", "Information");
}
}
public override bool OnStart()
{
try
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
queue = queueClient.GetQueueReference("taskqueue");
return base.OnStart();
}
catch (Exception e)
{
// Exception Handling & Logging
// Return false for OnStart
return false;
}
}
public void GetTasks()
{
if (queue == null)
return;
try
{
//Pull 10 - 15 rows from database. Just numbers and letters. No XML.
}
catch (Exception ex)
{
}
}
}
}
【问题讨论】:
-
可能异常只发生一次,因为获取的值被缓存并重用。
-
由于缺少程序集而发生错误。在 Visual Studio 中打开您的辅助角色项目。右键单击程序集。如果程序集来自 NuGet,请在您的解决方案中引用这些程序集,而不是在您的 C 驱动器上。
标签: c# azure azure-worker-roles