2014-01-14 38 views
3

當我們嘗試使用ASP.net MVC4網站更新用戶時,出現此錯誤。請幫我找出答案。這在以前沒有任何問題。ASP.NET MVC錯誤:被引用的對象未被任何客戶端鎖定

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 
+0

請提供您執行的方法的源代碼,而不是讓我們不得不從堆棧跟蹤中推斷出它。 –

+0

你的問題時機不能再好,因爲我們現在正在處理完全相同的錯誤......你能否檢查你的請求是否沒有超時?有關更多詳細信息,請參閱此帖:http://www.anujvarma.com/session-storage-app-fabric-cache/ –

+0

尊敬的@GauravMantri 代碼行不存在於我們的網站中配置。這是否意味着我需要添加,否則它需要默認值? – TBA

回答

6

請檢查您的請求沒有超時。在我們的項目中,我們也遇到了完全相同的問題,我們發現這篇博客文章非常有助於找到我們遇到此問題的原因: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> 

恕我直言,第2選項比第一個更可取,因爲您的目標是針對特定的操作,而不是整個網站。

然而正如我在評論中提到的那樣,這並非真正的萬無一失。更好的選擇是先優化代碼,以便您的請求不會花費很長時間。在我們的例子中,我們對存儲操作有一個不好的重試策略,我們通過修改重試策略來解決這個問題。

+0

非常感謝,我嘗試了第一個選項,它解決了我們的問題。雖然第二個選項看起來更可行,但我也可以嘗試。最後感謝您的幫助。 – TBA

+0

當我通過代碼進行調試時,會發生這種情況 –

0

不是一個解決方案,但這是一個解決方法,以確保此錯誤不會取消您的實例。它捕獲錯誤,然後重置緩存實例。

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(); 
    } 
相關問題