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.MessageQueue.Enqueue(RedisMessage アイテム、ブール値の highPri): C の BookSleeve.RedisConnectionBase.ExecuteVoid(RedisMessage メッセージ、ブール値の queueJump): \Dev\BookSleeve\BookSleeve\RedisConnectionBase.cs:794 ASP.welisten_booksleevetests_aspx.SaveDictionaryToRedis(Dictionary`2 辞書) +173 ASP.welisten_booksleevetests_aspx.Page_Load(オブジェクト送信者、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(ブール値 includeStagesBeforeAsyncPoint、ブール値 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();

これにより、接続が開かれ、さまざまなハンドシェイクが実行されます。シングルトンの場合、これはイニシャライザ中に行うのが合理的です。

でも!おそらく、ここでの問題は、2 番目の例が単純に間違っていることです。説明されているように、がシングルトンの場合Conn、それはそのコードに属していないため、使用しないでくださいusing。つまり、一度しか使用できず、それ以降のアクセスはすべて失敗します。接続にアクセスするだけです。いいえ、usingここではありません。

于 2012-04-05T20:47:04.550 に答える