Umbraco 7.10.4 System.Threading.ThreadAbortException: поток был прерван
Я использую последнюю версию Umbraco (7.10.4) в службе приложений Azure. Вчера я понял, что мой сайт показывает пустую белую страницу, но с HTTP-кодом состояния 200 (хорошо), поэтому мои тесты доступности вернулись нормально, и я не получил никаких уведомлений, и сайт практически не работал в течение 4 часов:|
Когда я понял, что гуглил это, и причина, по-видимому, в том, что время запроса SQL истекло. https://our.umbraco.org/forum/core/general/49635-Umbraco-cannot-start-Error-Republishing-Thread-was-being-aborted
Интересно, что поток заблокирован (или, по крайней мере, исключение начало возникать) на моей странице, когда он пытался получить страницу настроек от Umbraco.
2018-06-10 03:27:01,807 [P1332/D2/T1] INFO Umbraco.Core.CoreBootManager - Umbraco 7.10.4 application starting on xxx
2018-06-10 03:27:02,087 [P1332/D2/T1] INFO Umbraco.Core.MainDom - Acquiring MainDom...
2018-06-10 03:27:02,087 [P1332/D2/T1] INFO Umbraco.Core.MainDom - Acquired MainDom.
2018-06-10 03:27:09,370 [P1332/D2/T1] INFO Umbraco.Core.DatabaseContext - CanConnect = True
2018-06-10 03:27:09,933 [P1332/D2/T1] INFO Web.WebApiConfig - Register webapi
2018-06-10 03:27:10,041 [P1332/D2/T1] INFO Umbraco.Web.Cache.CacheRefresherEventHandler - Initializing Umbraco internal event handlers for cache refreshing
2018-06-10 03:27:17,634 [P1332/D2/T1] INFO Umbraco.Web.Search.ExamineEvents - Initializing Examine and binding to business logic events
2018-06-10 03:27:21,666 [P1332/D2/T1] INFO Umbraco.Web.Search.ExamineEvents - Adding examine event handlers for index providers: 3
2018-06-10 03:27:21,745 [P1332/D2/T1] INFO Umbraco.Core.CoreBootManager - Umbraco application startup complete (took 21747ms)
2018-06-10 03:27:23,447 [P1332/D2/T1] INFO Web.CustomStartup - CustomStartup done!
2018-06-10 03:32:37,047 [P1332/D2/T28] ERROR Web.Attributes.ApiExceptionFilterAttribute - exception happened:
System.Threading.ThreadAbortException: Thread was being aborted.
at Umbraco.Core.Cache.DictionaryCacheProviderBase.<>c__DisplayClass10_0.<GetSafeLazy>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, CacheDependency dependency)
at Umbraco.Core.Cache.HttpRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
at Umbraco.Core.Cache.DeepCloneRuntimeCacheProvider.GetCacheItem(String cacheKey, Func`1 getCacheItem, Nullable`1 timeout, Boolean isSliding, CacheItemPriority priority, CacheItemRemovedCallback removedCallback, String[] dependentFiles)
at Umbraco.Core.Manifest.ManifestBuilder.get_PropertyEditors()
at Umbraco.Core.PropertyEditors.PropertyEditorResolver.<>c__DisplayClass2_0.<.ctor>b__0()
at System.Lazy`1.CreateValue()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at Umbraco.Core.PropertyEditors.PropertyEditorResolver.GetByAlias(String alias)
at Umbraco.Core.PropertyEditors.ValueConverters.JsonValueConverter.IsConverter(PublishedPropertyType propertyType)
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Umbraco.Core.Models.PublishedContent.PublishedPropertyType.InitializeConverters()
at Umbraco.Core.Models.PublishedContent.PublishedContentType.<.ctor>b__3_0(PropertyType x)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Umbraco.Core.Models.PublishedContent.PublishedContentType..ctor(IContentTypeComposition contentType)
at Umbraco.Core.Models.PublishedContent.PublishedContentType.CreatePublishedContentType(PublishedItemType itemType, String alias)
at Umbraco.Core.Cache.CacheProviderExtensions.<>c__DisplayClass5_0`1.<GetCacheItem>b__0()
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Umbraco.Core.Cache.CacheProviderExtensions.GetCacheItem[T](ICacheProvider provider, String cacheKey, Func`1 getCacheItem)
at Umbraco.Core.Models.PublishedContent.PublishedContentType.Get(PublishedItemType itemType, String alias)
at Umbraco.Web.PublishedCache.XmlPublishedCache.XmlPublishedContent.InitializeNode(XmlNode xmlNode, Boolean legacy, Boolean isPreviewing, Int32& id, Guid& key, Int32& template, Int32& sortOrder, String& name, String& writerName, String& urlName, String& creatorName, Int32& creatorId, Int32& writerId, String& docTypeAlias, Int32& docTypeId, String& path, Guid& version, DateTime& createDate, DateTime& updateDate, Int32& level, Boolean& isDraft, PublishedContentType& contentType, Dictionary`2& properties, Func`3 getPublishedContentType)
at Umbraco.Web.PublishedCache.XmlPublishedCache.XmlPublishedContent.InitializeNode()
at Umbraco.Web.PublishedCache.XmlPublishedCache.XmlPublishedContent.get_DocumentTypeAlias()
at Umbraco.Web.PublishedContentExtensions.IsDocumentType(IPublishedContent content, String docTypeAlias)
at Web.Api.TemplatesController.GetSettings()
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()
Я перезапустил сайт, и он снова начал работать, но есть 2 вопроса:
1- Как предотвратить это снова? Увеличение продолжительности таймаута может помочь, но что, если это займет больше, чем это? Обычно вы не ожидаете, что что-то подобное произойдет в 3 часа ночи, когда на веб-сайте почти никто не будет использовать облачное решение.
2- Как мне установить оповещения об этом? Почему возвращается 200?!:|