0

2 つの ajax 呼び出しを実行する 2 つの関数があります。1 つの関数を呼び出し、他の関数を呼び出さない場合、コードは正常に実行されます。しかし、両方を同時に呼び出すと、2 つの内部サーバー エラー メッセージが表示されます。私が推測する機能ごとに1つ。

これは私のコードです:

   $(document).ready(function(){
         CategoryChangeState(@Model.CatId , subcategoryId);
         SubategoryChangeState(@Model.SubcatId);
    })
    public ActionResult ReturnListOfSubcategories( FormCollection collection ) {
            string categoryId = collection["result"];

            var subcategories = ProductManagerHelperClass.ReturnSubcategories(categoryId);
            return Json(subcategories);
    }
    public ActionResult ReturnListOfBrands() {

          var brands = ProductManagerHelperClass.ReturnBrands();
          return Json(brands);
    }
function CategoryChangeState(value ,  editPage) {
        .....
        $.ajax({
            type: "POST",
            url: "/ProductManager/ReturnListOfSubcategories",
            data: { result: value },
            datatype: "json",
            error: function (jqXHR, textStatus, errorThrown) {
                alert(errorThrown);
            }
        });
        ...
}

function SubategoryChangeState(value) {
         ....
         $.ajax({
            type: "POST",
            url: "/ProductManager/ReturnListOfBrands",
            datatype: "json",
            error: function (jqXHR, textStatus, errorThrown) {
                alert(errorThrown);
            }
        });
       ....
}

これらのエラーが発生する理由と解決方法を教えてください。

編集

デバッグ中に、コードのこの部分で次のことがわかりました。

 public static Dictionary<string , string> ReturnSubcategories(string categoryId)
    {
        int catId = int.Parse(categoryId);

        var subcategories = (from s in dataContext.SubCategories
                             where s.CatId == catId
                             select new
                                        {
                                            s.SubCatId,
                                            s.SubCatName
                                        }).ToDictionary(x => x.SubCatId.ToString(), x => x.SubCatName);

        return subcategories;
    } 

linq クエリは例外をスローします。

InvalidOperationException ExecuteReader requires an open and available Connection. The connection's current state is closed.

繰り返しますが、この例外は、両方の関数を呼び出した場合にのみスローされます

4

1 に答える 1

1

これは、(おそらく) データベースに接続する静的クラスを使用しているためです。次のことが起こります。

  1. スレッド 1 が静的クラスに入り、接続が開かれます。
  2. その間、スレッド 2 は同じクラスに入り、同じ開いている接続を使用します。
  3. スレッド 1 が完了すると、開いている接続が閉じられます。
  4. 開いている接続がないため、スレッド 2 はエラーをスローします。

これは、静的クラスを使用してデータベース接続をインスタンス化しない場合には発生しません。

于 2013-01-09T19:32:00.027 に答える