1

我在执行 Azure Web 角色(在 Azure 模拟器上运行,尚未上传到 Azure)期间抛出 System.AccessViolationException,当调用本地 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() 方法标记为方法而不是覆盖,没有错误。

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

看来,在 Azure 模拟器下运行时,访问局部变量作为重写方法的参数是一个问题!!!

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

任何建议或建议将不胜感激。

4

0 回答 0