1

我正在使用 Booksleeve 1.1.0.6(最新的 nuget 包)。

我想为我的整个 Web 应用程序使用一个连接,所以我将它存储在一个单例中:

public static RedisConnection Conn = RedisConfig.GetUnsecuredConnection(waitForOpen: true);

RedisConfig.GetUnsecuredConnection方法与 BookSleeve 测试中使用的方法相同。

当我尝试执行操作时,我得到一个InvalidOperationException: The queue is closed异常:

[InvalidOperationException: 队列已关闭] C:\Dev\BookSleeve\BookSleeve\MessageQueue.cs:73 BookSleeve.RedisConnectionBase.ExecuteVoid(RedisMessage message, Boolean queueJump) 中的 BookSleeve.MessageQueue.Enqueue(RedisMessage item, Boolean highPri) C: \Dev\BookSleeve\BookSleeve\RedisConnectionBase.cs:794 ASP.welisten_booksleevetests_aspx.SaveDictionaryToRedis(Dictionary`2 字典) +173 ASP.welisten_booksleevetests_aspx.Page_Load(Object sender, EventArgs e) +67 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, 对象 o, 对象 t, EventArgs e) +25 System.Web.UI.Control.LoadRecursive() +71 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3064

我尝试将waitForOpen参数设置为truefalse

这是我要执行的代码:

 private void SaveDictionaryToRedis(Dictionary<string, string> dictionary)
    {
        using (Mp.Step("Saving Data to Redis"))
        {
            using (RedisConfig.Conn)
            {
                RedisConfig.Conn.Strings.Set(DB, dictionary);

            }
        }
    }
4

1 回答 1

1

根据复制的内容,可能缺少对以下内容的调用:

theConnection.Open();

这将打开连接并执行各种握手。精简单例的情况,在初始化程序期间这样做是合理的。

然而!也许这里的问题是你的第二个例子是完全错误的。如果Conn是,如上所述,一个单例 - 那么它不属于该代码,你不应该使用using. 这意味着它只能使用一次,并且所有后续访问都将失败。只需访问连接;不在using这里。

于 2012-04-05T20:47:04.550 回答