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