2

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

有一次,Azure 门户打印了这个错误:

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

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

有人对这个问题可能是什么有任何想法吗?

更新:

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

图片 imageEntity = db.Images.Find(ImgViewFromQueue.Id);

我想知道这个问题是否与 Azure 服务器上未正确启用或配置实体框架有关。

4

2 回答 2

1

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

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

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

<Runtime executionContext="elevated" />
于 2012-12-12T03:39:33.837 回答
0

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

于 2012-12-12T05:44:57.340 回答