【问题标题】:ASP.NET MVC error : Object being referred to is not locked by any ClientASP.NET MVC 错误:被引用的对象未被任何客户端锁定
【发布时间】:2014-01-14 12:51:50
【问题描述】:

当我们尝试使用 ASP.net MVC4 网站更新用户时,我们会收到此错误。请帮我找出来。这以前可以正常工作。

ErrorCode<ERRCA0012>:SubStatus<ES0001>:被引用的对象没有被任何客户端锁定。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情:Microsoft.ApplicationServer.Caching.DataCacheException: ErrorCode<ERRCA0012>:SubStatus<ES0001>:所引用的对象未被任何客户端锁定。

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。

堆栈跟踪:

[DataCacheException: ErrorCode<ERRCA0012>:SubStatus<ES0001>:Object being referred to is not locked by any client.]
   Microsoft.ApplicationServer.Caching.DataCache.ThrowException(ErrStatus errStatus, Guid trackingId, Exception responseException, Byte[][] payload, EndpointID destination) +551
   Microsoft.ApplicationServer.Caching.SocketClientProtocol.ExecuteApi(IVelocityRequestPacket request, IMonitoringListener listener) +287
   Microsoft.ApplicationServer.Caching.SocketClientProtocol.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout, DataCacheTag[] tags, String region, IMonitoringListener listener) +360
   Microsoft.ApplicationServer.Caching.DataCache.InternalPutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout, DataCacheTag[] tags, String region, IMonitoringListener listener) +216
   Microsoft.ApplicationServer.Caching.<>c__DisplayClass9d.<PutAndUnlock>b__9c() +160
   Microsoft.ApplicationServer.Caching.DataCache.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout) +276
   Microsoft.Web.DistributedCache.<>c__DisplayClass1c.<PutAndUnlock>b__1b() +52
   Microsoft.Web.DistributedCache.<>c__DisplayClass31`1.<PerformCacheOperation>b__30() +19
   Microsoft.Web.DistributedCache.DataCacheRetryWrapper.PerformCacheOperation(Action action) +208
   Microsoft.Web.DistributedCache.DataCacheForwarderBase.PerformCacheOperation(Func`1 func) +167
   Microsoft.Web.DistributedCache.DataCacheForwarderBase.PutAndUnlock(String key, Object value, DataCacheLockHandle lockHandle, TimeSpan timeout) +162
   System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +929
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +270

【问题讨论】:

  • 请提供您执行的方法的源代码,而不是让我们从堆栈跟踪中推断出来。
  • 您的问题的时机再好不过了,因为我们现在正在处理完全相同的错误......您能检查一下您的请求是否超时吗?有关详细信息,请参阅此帖子:anujvarma.com/session-storage-app-fabric-cache
  • 亲爱的@GauravMantri 我们的网络配置中没有这行代码。是不是意味着我需要添加,否则就默认了?
  • 我们尝试过,但似乎并没有真正帮助我们。请检查您的代码,看看是否有任何东西会导致请求超时。在我们的例子中,这是我们为重试存储操作设置的重试策略。
  • 我们在 azure 中也遇到了完全相同的问题,今天让我们失望了。它在重新启动并启动其他服务器后解决。我们没有在会话结束时运行的代码,所以我不确定我们是否只是在会话中放入了不应该的东西,或者 azure 缓存会话提供程序是否存在错误/问题。

标签: c# asp.net asp.net-mvc caching azure


【解决方案1】:

请检查您的请求是否超时。我们在项目中也遇到了完全相同的问题,我们发现这篇博文非常有助于找出我们遇到此问题的原因:http://www.anujvarma.com/session-storage-app-fabric-cache/

我们最初做的一件事是在 web.config 中将请求超时增加到 5 分钟(300 秒),如博文中所述。然而,我们只为我们知道会遇到超时问题的操作这样做。要更改所有操作的超时时间,您可以执行以下帖子中提到的操作:

<system.web>
    <httpRuntime executionTimeout = "300"/>
  </system.web>

或者您可以增加特定操作的超时时间:

  <location path="Controller/Action">
    <system.web>
      <httpRuntime executionTimeout="300"/>
    </system.web>
  </location>

恕我直言,第二个选项比第一个选项更可取,因为您针对的是特定操作而不是整个网站。

但是,正如我的 cmets 中所提到的,这并不是万无一失的。更好的选择是首先优化代码,这样您的请求就不会花费很长时间。在我们的案例中,我们的存储操作重试策略错误,我们通过修改该重试策略解决了这个问题。

【讨论】:

  • 非常感谢,我尝试了第一个选项,它解决了我们的问题。虽然第二个选项看起来更可行,但让我也尝试一下。最后感谢您的帮助。
  • 当我逐步调试代码时,这种情况经常发生
【解决方案2】:

不是解决方案,但这是一种解决方法,可确保此错误不会关闭您的实例。它捕获错误,然后重置缓存实例。

http://blogs.msdn.com/b/cie/archive/2014/04/29/cache-retry-fails-what-next.aspx

你捕获异常,检查它是否是数据缓存异常,然后重置缓存设置。

    public static void Refresh()
    {
        var factory = _factory; if (factory != null)
        {
            factory.Dispose();
            _factory = null;
        }
        _cache = null;

        DataCacheFactory.Reinitialize();
        DistributedCacheSessionStateStoreProvider.Reinitialize();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2016-05-11
    相关资源
    最近更新 更多