Эта строка кода вызывает исключения, показанные ниже:
object arg = methodCallMessage.Args[i];
private static List<ParameterInformation> GetParameterInfoList( IMethodCallMessage methodCallMessage )
{
List<ParameterInformation> parameterInformationList = new List<ParameterInformation>();
// Note: This works even if a parameter's value is null.
for( int i = 0 ; i < methodCallMessage.ArgCount ; i++ )
{
string argName = methodCallMessage.GetArgName(i);
object arg = methodCallMessage.Args[i];
var parameterInformation = new ParameterInformation(argName, arg);
parameterInformationList.Add(parameterInformation);
}
return parameterInformationList;
}
Исключение:
FatalExecutionEngineError: среда выполнения обнаружила фатальную ошибку. Адрес ошибки был 0x71b97e8d, в потоке 0x2ef4. Код ошибки 0xc0000005. Эта ошибка может быть ошибкой в CLR или в небезопасных или непроверяемых частях пользовательского кода. Распространенными источниками этой ошибки являются ошибки пользовательского маршалинга для COM-взаимодействия или PInvoke, которые могут повредить стек.
Или иногда это исключение:
AccessViolationException: Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.
Это происходит на нескольких машинах.
В стеке вызовов, когда я показываю внешний код, это вверху:
mscorlib.dll! System.Runtime.Remoting.Messaging.Message.Args.get () + 0x5 байт.
Есть идеи, почему это происходит, или как это исправить?
Примечание. Код, вызывающий этот метод, имеет блокировку вокруг него, поэтому он не должен быть проблемой потоков / синхронизации.