[英]ServiceStack.Redis client - A transaction is already in progress
我正在使用servicestack.redis
客户端进行连接。 Redis基本上被用作SignalR背板(使用bookleeve客户端)。 我还使用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
状态,因为RedisClient.Transaction
对象永远不会为null
。
我找不到ServiceStack.Redis
的错误跟踪器,因此希望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();
}
}
因此,在这种情况下,问题在于我正在重用redis连接,但这不是一个好主意。 每次我转到创建和使用新的Redis连接时,这个问题就消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.