我得到一个蓝色的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模拟器下运行时,访问本地变量作为重写方法的参数是个问题!!!
我希望这只是在模拟器下运行时的问题,但是我们仍然需要修复,否则开发更难。
非常感谢任何建议或建议。