在Azure模拟器下运行Azure Web角色时抛出AccessViolationException

时间:2014-03-04 16:31:12

标签: azure access-violation webrole

我得到一个蓝色的Web角色的执行过程中抛出一个System.AccessViolationException(在Azure的仿真器上运行,这并没有被上传到Azure中还)当呼叫到一个对象的覆盖方法制成当一个地方int变量作为方法参数之一传递。异常消息是“尝试读取或写入受保护的内存。这通常表示其他内存已损坏”。

抛出异常的代码是本地库的一部分,该库已在实时系统(非Azure)上使用了几年而没有任何问题。错误的部分如下:

foreach (XmlDataComponent item in this.items)
{
   int index = 0;
   XmlNode node = item.ToXml(dataSet, xmlDocument, this, index);  // Exception thrown when this call is made
   ...
}

XmlDataComponent是一个基类,当代码运行时,item是其派生类之一。在派生类中重写ToXml()方法。一旦调用ToXml(),就会抛出异常。

问题是索引参数。如果我交换使用显式值而不是局部变量,例如

item.ToXml(dataSet, xmlDocument, this, 0)

没有错误。

同样,如果我将项目转换为实际类型,例如

((XmlDataItem)item).ToXml(dataSet, xmlDocument, this, index))

并将XmlDataItem类中的ToXml()方法标记为 new ,而不是覆盖,没有错误。

我还尝试从控制台应用程序而不是具有完全相同数据的Web角色调用库(即除了在Web角色下运行之外的所有内容都相同)。再次,这没有造成任何问题。

在Azure模拟器下运行时,访问本地变量作为重写方法的参数是个问题!!!

我希望这只是在模拟器下运行时的问题,但是我们仍然需要修复,否则开发更难。

非常感谢任何建议或建议。

0 个答案:

没有答案