如何使用单例存储RedisConnection与Booksleeve?

时间:2012-04-04 00:13:10

标签: booksleeve

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

            }
        }
    }

1 个答案:

答案 0 :(得分:1)

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

theConnection.Open();

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

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