我正在使用Booksleeve 1.1.0.6(最新的nuget包)。
我想为我的整个Web应用程序使用单个连接,所以我将它存储在一个单例中:
public static RedisConnection Conn = RedisConfig.GetUnsecuredConnection(waitForOpen: true);
RedisConfig.GetUnsecuredConnection 方法与BookSleeve测试中使用的方法相同。
当我尝试执行操作时,我得到 InvalidOperationException:队列已关闭异常:
[InvalidOperationException:队列已关闭] C:\ Dev \ BookSleeve \ BookSleeve \ MessageQueue.cs中的BookSleeve.MessageQueue.Enqueue(RedisMessage项,布尔值为highPri):73 C:\ Dev \ BookSleeve \ BookSleeve \ RedisConnectionBase.cs中的BookSleeve.RedisConnectionBase.ExecuteVoid(RedisMessage消息,布尔队列跳转):794 ASP.welisten_booksleevetests_aspx.SaveDictionaryToRedis(Dictionary`2 dictionary)+173 ASP.welisten_booksleevetests_aspx.Page_Load(Object sender,EventArgs e)+67 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e)+25 System.Web.UI.Control.LoadRecursive()+ 71 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3064
我尝试将 waitForOpen 参数设置为 true 和 false
这是我正在尝试执行的代码:
private void SaveDictionaryToRedis(Dictionary<string, string> dictionary)
{
using (Mp.Step("Saving Data to Redis"))
{
using (RedisConfig.Conn)
{
RedisConfig.Conn.Strings.Set(DB, dictionary);
}
}
}
答案 0 :(得分:1)
根据复制的内容,可能缺少对以下内容的调用:
theConnection.Open();
将打开连接并执行各种握手。简化单例的情况,这在初始化期间是合理的。
然而!也许这里的问题是你的第二个例子是完全错误的。如果Conn
如上所述是单例 - 那么它不属于该代码,您不应该使用using
。这意味着它只能使用一次,所有后续访问都会失败。只需访问连接;这里没有using
。