1

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エミュレーターで実行すると、オーバーライドされたメソッドへのパラメーターとしてローカル変数にアクセスすることが問題になるようです!!!

これがエミュレーターで実行するときの問題だけであることを願っていますが、それでも修正が必要です。そうしないと、開発がより困難になります。

提案やアドバイスをいただければ幸いです。

4

0 に答える 0