Jestem hosting aplikacji, która używa AutoMapper do konwersji niektórych klas na inne. Wszystko działo się dobrze do dzisiaj. Aplikacja jest hostowana przez około 3 miesiące. W międzyczasie wykonaliśmy kilka wdrożeń, w których aplikacja została ponownie uruchomiona, ale usługi IIS tego nie zrobiły.AutoMapper 1.1 TworzenieMap podnosi wyjątek NullReferenceException po długim okresie bezczynności
znikąd wniosku rozpoczął się niepowodzeniem, patrząc na dzienników okazało się, że to jest przyczyną:
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]()
Więc zmieniliśmy na naszym serwerze kopii zapasowych, które nie mają tego problemu w wszystko. Próbowaliśmy rozwiązać problem, ponownie uruchamiając aplikację, co nie pomogło. Tylko ponowne uruchomienie IIS rozwiązało problem.
Staraliśmy patrząc w źródle, aby dowiedzieć się, co jest przyczyną tego problemu, który mamy ściągnięty na https://github.com/jbogard/AutoMapper/. Wyjątek wydaje się być spowodowany w tej metodzie klasy ConfigurationStore AutoMapper.
private TypeMap FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
{
return _typeMaps.FirstOrDefault(x => x.DestinationType == destinationType && x.SourceType == sourceType);
}
_typeMaps jest zdefiniowany jako następujący w klasie.
private readonly IList<TypeMap> _typeMaps = new List<TypeMap>();
Jeśli sprawdzić w TypeMap widzimy, że x.DestionationType i odniesienie x.SourceType do innych właściwości:
private readonly TypeInfo _destinationType;
private readonly TypeInfo _sourceType;
public Type SourceType
{
get { return _sourceType.Type; }
}
public Type DestinationType
{
get { return _destinationType.Type; }
}
Wygląda _sourceType i/lub _destionationType są nieważne al nagłe!
Czy ktoś w obliczu tego problemu i/lub czy ktoś wie możliwe przyczyny tego problemu i jak możemy temu zapobiec w przyszłości?