两个ajax调用同时导致两个内部服务器错误

时间:2013-01-09 19:22:12

标签: c# ajax asp.net-mvc asp.net-mvc-3 jquery

我有两个执行两个ajax调用的函数。如果我调用一个函数而不调用另一个函数 代码正常执行。但如果我同时调用它们两个,我会收到两条内部服务器错误消息。我认为每个功能都有一个。

这是我的代码:

   $(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.

如果我同时调用两个函数

,则仅抛出此异常

1 个答案:

答案 0 :(得分:1)

那是因为你使用了一个静态类,你可以在其中(可能)建立与数据库的连接。 发生以下情况:

  1. 线程1进入静态类,打开连接。
  2. 同时,线程2进入同一个类,并使用相同的开放连接。
  3. 当线程1完成时,它会关闭打开的连接。
  4. 线程2因为没有打开连接而抛出错误。
  5. 如果不使用静态类来实例化数据库连接,则不会发生这种情况。