Azure Web ロールの実行中に System.AccessViolationException がスローされます (Azure エミュレーターで実行されます。これはまだ Azure にアップロードされていません)。メソッド パラメータの 1 つとして渡されます。例外メッセージは、「保護されたメモリを読み書きしようとしました。これは多くの場合、他のメモリが破損していることを示しています」です。
例外がスローされるコードは、ライブ システム (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 は基本クラスであり、コードが実行される項目はその派生クラスの 1 つです。ToXml() メソッドは、派生クラスでオーバーライドされます。ToXml() の呼び出しが行われるとすぐに、例外がスローされます。
問題は index パラメータです。これをスワップして、ローカル変数の代わりに明示的な値を使用すると、たとえば
item.ToXml(dataSet, xmlDocument, this, 0)
エラーはありません。
同様に、アイテムを実際のタイプにキャストすると、たとえば
((XmlDataItem)item).ToXml(dataSet, xmlDocument, this, index))
XmlDataItem クラスの ToXml() メソッドをオーバーライドする代わりに新規としてマークします。エラーはありません。
また、まったく同じデータを持つ Web ロールではなく、コンソール アプリケーションからライブラリを呼び出してみました (つまり、Web ロールで実行する以外はすべて同じです)。繰り返しますが、これは問題を引き起こしませんでした。
Azureエミュレーターで実行すると、オーバーライドされたメソッドへのパラメーターとしてローカル変数にアクセスすることが問題になるようです!!!
これがエミュレーターで実行するときの問題だけであることを願っていますが、それでも修正が必要です。そうしないと、開発がより困難になります。
提案やアドバイスをいただければ幸いです。