我正在使用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();
}
}