2013-11-26 25 views
1

我正在使用servicestack.redis客戶端進行連接。 Redis基本上被用作SignalR背板(使用bookleeve客戶端)。我還使用ServiceStack.Redis客戶端保持連接列表ServiceStack.Redis客戶端 - 交易已在進行中

我有這樣的代碼在RedisConnectionManager.cs(與AddConnectionGetConnections類似的方法沿着該AddConnectionRemoveConnection通過在SignalR樞紐方法調用。

現在,讓我們來看看這個問題......在一段時間後,我得到了InvalidOperationException與在CreateTransaction呼叫消息A transaction is already in progress,這通常是一個例外,通過Redis的if語句if (connections == null || connections.Count == 0)

後拋出一個不管怎麼樣,在那之後,在我重新開始這個過程之前,事情不再起作用 - 因爲每次我得到一個InvalidOperationException。我插入ServiceStack.Redis客戶端代碼,根據文檔,它應該提交或放棄交易。似乎沒有發生這種情況,然後客戶端處於一種緩衝狀態,因爲RedisClient.Transaction對象從來不是null ed。

我找不到ServiceStack.Redis的bug跟蹤器,所以希望SO的朋友能更好地瞭解。

public void RemoveConnection(string clientId, string connectionId) 
    { 

     try 
     { 
      var key = "CONNECTION_" + clientId; 
      redis.Watch(key); 

      var connections = redisTypedClient.Lists[key]; 


      if (connections == null || connections.Count == 0) 
      { 
       return; 
      } 


      using (var t = redisTypedClient.CreateTransaction()) 
      { 
       t.QueueCommand(c => c.RemoveItemFromList(connections, connectionId)); 
       t.Commit(); 
      } 

     } 
     finally 
     { 
      redis.UnWatch(); 
     } 
    } 

回答

1

所以在這種情況下,問題是我重新使用redis連接,這不是一個好主意。每當我開始創建和使用新的Redis連接時,此問題就消失了。