J'utilise NHibernate avec Velocity comme second fournisseur de niveau de cache.NHibernate avec Appfabric Velocity se bloque après la suppression de la région
Je dois effacer une zone. J'utilise ce code:
_sessionFactory.EvictQueries("Authorization");
var authCache = _sessionFactory.GetSecondLevelCacheRegion("Authorization");
authCache.Clear();
authCache.Clear() appelle en fait la méthode NHibernate.Caches.Velocity.VelocityClient.Cache.
La zone est effacée correctement. Mais juste après cela, une nouvelle session est ouverte et une requête est faite contre une entité précédemment mise en cache. Il essaie de GetAndLock dans VelocityClient. Coup. Le AppFabricCachingService se bloque (voir le journal des événements ci-dessous)
Est-ce que je vide le cache correctement? Quelle est mon erreur?
=====================
EVEN
AppFabric Caching service crashed with exception {System.Runtime.CallbackException: Async Callback threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.GetPlaceHolderObject(Object key)
at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.PreProcess(MDHObjectNode oldObjectNode, MDHObjectNode& newObjectNode, MDHOperationInfo& operationInfo)
at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.PutNodeInSlot(MDHOperationInfo& operationInfo, MDHDirectoryNode dir, Int32 slotIndex)
at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.TryOperation(MDHOperationInfo& operationInfo)
at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.PerformOperation(MDHOperationInfo& operationInfo)
at Microsoft.ApplicationServer.Caching.MultiDirectoryHashtable.GetAndLock(Object key, TimeSpan lockTimeOut, Boolean lockKey, DMOperationCallBack preOperation, DMOperationCallBack postOperation, Object opState)
at Microsoft.ApplicationServer.Caching.DMHashContainer.GetAndLock(Object key, TimeSpan lockTimeOut, Boolean lockKey, Object opState)
at Microsoft.ApplicationServer.Caching.ObjectManager.GetAndLock(String cacheName, String regionName, Object key, TimeSpan lockTimeOut, DataCacheLockHandle& lHandle, Boolean lockKey, Object opState)
at Microsoft.ApplicationServer.Caching.VelocityDataStore.ProcessWriteRequest(RequestBody request)
at Microsoft.ApplicationServer.Caching.VelocityDataStore.ProcessMessageRequest(RequestBody request)
at Microsoft.ApplicationServer.Caching.DistributedObjectManager.OnReceiveMessageFromRemoteDRM(IReplyContext replyContext)
at Microsoft.ApplicationServer.Caching.WcfTransportChannel.InvokeCallback(Message message, IChannelContainer container)
at Microsoft.ApplicationServer.Caching.WcfServerChannel.InvokeCallback(Message message, IChannelContainer container)
at Microsoft.ApplicationServer.Caching.WcfServerChannel.CompleteProcessing(IAsyncResult result)
at Microsoft.ApplicationServer.Caching.WcfTransportChannel.Receive(IAsyncResult result)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
--- End of inner exception stack trace ---
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously, Exception exception)
at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state)
at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state)
at System.ServiceModel.Channels.StreamConnection.OnRead(IAsyncResult result)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest)
at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result)
at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes)
at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously, Exception exception)
at System.ServiceModel.Channels.ConnectionStream.ReadAsyncResult.OnAsyncReadComplete(Object state)
at System.ServiceModel.Channels.SocketConnection.FinishRead()
at System.ServiceModel.Channels.SocketConnection.AsyncReadCallback(Boolean haveResult, Int32 error, Int32 bytesRead)
at System.ServiceModel.Channels.OverlappedContext.CompleteCallback(UInt32 error, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)}. Check debug log for more information