我正在使用servicestack.redis
客戶端進行連接。 Redis基本上被用作SignalR背板(使用bookleeve客戶端)。我還使用ServiceStack.Redis客戶端保持連接列表ServiceStack.Redis客戶端 - 交易已在進行中
我有這樣的代碼在RedisConnectionManager.cs
(與AddConnection
和GetConnections
類似的方法沿着該AddConnection
和RemoveConnection
通過在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();
}
}