c# - ASP.NET MVC 错误 : Object being referred to is not locked by any Client

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

当我们尝试使用 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

最佳答案

请检查您的请求是否未超时。我们在项目中也遇到了完全相同的问题,我们发现这篇博客文章对于查找我们遇到此问题的原因非常有帮助: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>

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

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

关于c# - ASP.NET MVC 错误 : Object being referred to is not locked by any Client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21114034/

相关文章:

c# - 在 AppPool 循环后重新连接时,MVC5 卡在 MapSignalR 上

c# - 如何将参数从 ajax 传递到 web 方法?

asp.net-mvc - 如何从 Owin Middleware 正确登录用户

asp.net-mvc - 使用EF在MVC4中实现公司、部门、部门用户访问控制

javascript - 在按钮上单击如果文本框值为空则使用 asp.net mvc 显示警报?

c# - 等待来自多个对象的任务

c# - 为什么绑定(bind) DropDownList 的功能不同于手动添加 ListItems?

c# - 检查 WebAPI 在 C# Code Behind 中是否可用的简单、最佳方法

asp.net - .NET Framework 4.0 是否作为 Visual Studio 2010 安装的一部分安装?

c# - 如何将集合中的 item.date 与日期进行比较