Azure云服务工作者角色崩溃和不健康

时间:2012-12-12 01:43:41

标签: .net azure azure-storage azure-worker-roles

我有一个带有一个Web角色和一个Worker角色的项目。 每当我在本地测试它时,我的web和worker角色都会按预期工作。 (注意,尽管本地版本使用Azure Compute Emulator,但Service Bus队列和Message队列使用实时云版本。) 但是,Cloud Service辅助角色在某些操作期间会出现崩溃的趋势。它导致实例“回收”并且消息卡在Azure Service Bus队列中。直到我在本地运行云服务,它才能成功处理消息,然后将其从队列中删除。即使角色有效,Azure也经常在仪表板上告诉我工作者角色正在运行“不健康”。

Azure门户网站曾一度打印此错误:

  

未处理的异常:System.Reflection.ReflectionTypeLoadException

我在我的项目中为此添加了异常处理,并在将更新部署到云后再次尝试,但同样的事情不断发生。当我将异常处理添加到我的项目时,我不得不将System.Reflection库添加到我的worker角色,但这让我更加困惑。我不明白为什么我收到一个我最初没有在我的项目中使用的库调用错误。

任何人对这个问题都有什么想法?

更新:

我做了一些手动调试,并注意到在Worker Role的Run()中调用了异常。导致问题的代码行涉及使用Entity Framework调用数据库。具体的一行是:

  

Image imageEntity = db.Images.Find(ImgViewFromQueue.Id);

我想知道问题是否与Azure服务器上未正确启用或配置的Entity Framework有关。

2 个答案:

答案 0 :(得分:1)

我在OSFamily = 3(Server 2012)上运行辅助角色时遇到类似问题。如果你在3上运行并且可以回滚到2,你可能会发现worker角色工作得很好。我在Azure支持工程师的帮助下回答了我的问题 - Azure Worker Role runs on osFamily="2" (Server 2008R2) but Fails on osFamily="3" (Server 2012)

区别:在OS系列2中,WaWorkerHost在角色初始化过程生成的临时帐户(具有GUID名称)下运行,该帐户具有特殊权限;在OS系列3中,WaWorkerHost由“NETWORK SERVICE”帐户运行,此帐户缺少一些工作人员角色权限。

如果您必须拥有OSfamily 3,则可以尝试使用提升的权限运行。在cscfg文件的<WorkerRole>元素中,添加子项:

<Runtime executionContext="elevated" />

答案 1 :(得分:0)

不确定您是否可以启用InelliTrace并重新部署您的软件包,然后您希望在系统中找到实际的异常。我的2美分。