Sitecore 中的 RetryerRequiredException shell

RetryerRequiredException in Sitecore shell

有没有人体验过 Sitecore shell 中的 RetryerRequiredException?当我想发布项目或重建 link 数据库(或任何需要保存到数据库的任何内容)时,我在测试环境(本地没有问题)中遇到此异常。

我是 运行 SC7.2(修订版 141226),具有 Oracle 后端。 web.config 中的重试器元素已禁用。

这是异常信息:

Retryer required for database operation. You need to wrap code into Factory.GetRetryer().Execute<int>(() => {}) context.

和堆栈跟踪:

[RetryerRequiredException: Retryer required for database operation. You need to wrap code into Factory.GetRetryer().Execute<int>(() => {}) context.]
   Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateTransaction() +354
   Sitecore.Data.Security.Accounts.SqlMembershipUser.UpdateProperties(String propertyNames, String propertyValues, Byte[] binaryValues) +62
   Sitecore.Data.Security.Accounts.SqlProfileProviderBase.SetPropertyValues(SettingsContext sc, SettingsPropertyValueCollection properties) +611
   System.Configuration.SettingsBase.SaveCore() +474
   System.Configuration.SettingsBase.Save() +104
   System.Web.Profile.ProfileBase.SaveWithAssert() +42
   System.Web.Profile.ProfileBase.Save() +122
   Sitecore.Security.UserProfile.Save() +266
   Sitecore.Web.UI.HtmlControls.Registry.SetValue(String key, String value) +222
   Sitecore.Shell.Applications.ShellForm.ShowDatabaseName(String visible) +93

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0
   System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +76
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +211
   Sitecore.Shell.Framework.Commands.MethodCommandProcessor.Invoke(PipelineArgs args) +534
   Sitecore.Nexus.Pipelines.NexusPipelineApi.Resume(PipelineArgs args, Pipeline pipeline) +398
   Sitecore.Pipelines.Pipeline.Start(PipelineArgs args, Boolean atomic) +366
   Sitecore.Shell.Framework.Commands.MethodCommand.Execute(CommandContext context) +632
   Sitecore.Web.UI.Sheer.ClientPage.OnPreRender(EventArgs e) +547
   System.Web.UI.Control.PreRenderRecursiveInternal() +113
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4297

编辑 1:

我也尝试启用重试器配置元素,但这会导致完全相同的异常。

编辑 2:

最近发生变化的一件事是从 7.2 版本 140526 升级到版本 141226。在发行说明中我看到了这一点:

Sitecore configuration has been changed to use different retryer instances for every database object so that the active retryer for a database does not block the work with other databases. (422504)

但是相应的web.config并没有显示与此相关的变化。

我最终将此问题提交给 support.sitecore.com,这显然是一个错误。解决方法是在配置中注释掉整个重试器元素:

<!--retryer disabled="true" type="Sitecore.Data.DataProviders.Retryer, Sitecore.Kernel">
      <param desc="Number of tries">6</param>
      <param desc="Interval between tries">00:00:00.500</param>
      <param desc="Log each exception (should be used for debug only)">true</param>
    </retryer-->