Я размещаю приложение, которое использует AutoMapper для преобразования некоторых классов в другие.До сегодняшнего дня все шло хорошо.Приложение было размещено в течение примерно 3 месяцев.В промежутке мы выполнили несколько развертываний, в которых приложение было перезапущено, а IIS - нет.
Из ниоткуда приложение начало отказывать, оглядываясь на журналы, которые мы обнаружили, что это является причиной:
System.NullReferenceException: Object reference not set to an instance of an object.
at AutoMapper.Configuration.<>c__DisplayClass13.<FindExplicitlyDefinedTypeMap>b__12(TypeMap x)
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at AutoMapper.Configuration.FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
at AutoMapper.Configuration.CreateTypeMap(Type source, Type destination, String profileName)
at AutoMapper.Configuration.CreateMap[TSource,TDestination](String profileName)
at AutoMapper.Configuration.CreateMap[TSource,TDestination]()
at AutoMapper.Mapper.CreateMap[TSource,TDestination]()
Итак, мы переключились на наш резервный сервер, у которого вообще нет этой проблемы.Мы попытались решить проблему, перезапустив приложение, что не помогло.Только перезапуск IIS устранил проблему.
Мы попытались найти в источнике причину этой проблемы, которую мы скачали в https://github.com/jbogard/AutoMapper/. Похоже, что исключение вызвано в этом методе ConfigurationStore.класс AutoMapper.
private TypeMap FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
{
return _typeMaps.FirstOrDefault(x => x.DestinationType == destinationType && x.SourceType == sourceType);
}
_typeMaps определяется следующим образом в классе.
private readonly IList<TypeMap> _typeMaps = new List<TypeMap>();
Если мы проверяем в TypeMap, мы видим, что ссылки x.DestionationType и x.SourceTypeс другими свойствами:
private readonly TypeInfo _destinationType;
private readonly TypeInfo _sourceType;
public Type SourceType
{
get { return _sourceType.Type; }
}
public Type DestinationType
{
get { return _destinationType.Type; }
}
Похоже, _sourceType и / или _destionationType не имеют значения внезапно!
Кто-нибудь еще сталкивался с этой проблемой и / или кто-нибудь знает возможную причину этогопроблема и как мы можем предотвратить это в будущем?