0

我一直在做一些搜索,结果是空的。当我搜索该短语时,我通常最终会让人问如何使页面不断重新加载。我遇到了相反的问题。

情况:我有两组功能相同的代码(“测试”分支和“生产”分支 - 仅在一周前合并为相同)在 IIS Express 或 ASP.NET 开发服务器上运行。唯一的区别是他们正在调用的数据库(我什至将其设置回来,所以他们正在调用同一个数据库)。当然,出于调试目的,我们在这里和那里进行了一些更改,但代码功能没有任何不同。

问题:我们有一个脚本 Products.aspx 处理虚拟页面(很像 WordPress),称为“类别”,因为它的主要用途是在我们的电子商务软件中显示产品组。在测试分支上,此页面会在瞬间和几秒之间以随机间隔重新加载。它没有注册为 PostBack(单步执行时的注册)if (!IsPostBack)true

当它进行这些无限调用时,它每次通过页面时都会创建一个新线程。Chrome 开发者工具说“等待”时间是 1.5-2 分钟(上次是 1.7 分钟),WebResource.axd并且ScriptResource.axd会继续“等待”几分钟。

有任何想法吗?

编辑:一些代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack && !IsCallback)
        LoadList();
}

private void LoadList()
{
    int categoryId = Http.PrmIntOrZero["CategoryId"];
    string search = Http.PrmOrEmpty["Search"];

    DataRow c = DBCategory.GetOrNull(categoryId);
    if (c == null)
    {
        Response.Redirect("~/", true);
        return;
    }

    TitleC.Text = (string)c["Name"];
    Description.Text = System.Convert.ToString(c["Description"]);
}

注意: Http.PrmIntOrZero 只是一种使用较短行调用查询字符串的方法。

编辑 2:我继续将它提交给一个现场环境,它工作得很好。我无法解释,但它一定与 Visual Studio 在特定开发服务器上的调试过程有关,只是它也发生在 IIS Express 中......

4

3 回答 3

0

代码行 DataRow c = DBCategory.GetOrNull(categoryId); 一直在获取空值,因此请确保您的数据库中有数据。

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack && !IsCallback)
            LoadList();
    }

    private void LoadList()
    {
        int categoryId = Http.PrmIntOrZero["CategoryId"];
        string search = Http.PrmOrEmpty["Search"];

        DataRow c = DBCategory.GetOrNull(categoryId);
        if (c == null)
        {
            Response.Redirect("~/", true);
            return;
        }

        TitleC.Text = (string)c["Name"];
        Description.Text = System.Convert.ToString(c["Description"]);
    }
于 2013-05-31T07:16:59.533 回答
0

Response.Redirect("~/", true);的是罪魁祸首。

它将向浏览器发送 302 到根页面。由于您提到此页面处理虚拟页面,我想它还处理对"/". 当页面再次加载时,您可能不会再次从数据库中获取记录并且它会再次重定向。这显然会无休止地继续下去。

注意: ASP.NET 不会将 302 浏览器重定向识别为回发,因此if-clause 不会保护您的页面免于进入循环。

您在响应时间上看到的差异可能是因为有各种待处理的请求,有时线程池已用完,它必须等待一些请求完成。

于 2013-05-30T19:41:53.650 回答
0

所以事实证明,我们有一个我不知道的控件(我从以前的开发人员那里继承了这个项目)导致了这种情况。

protected override void OnPreRender(EventArgs e)
    {
        string text = this.ImageUrl;
        if (this.TemplateImageUrl != null)
        {
            text = this.TemplateImageUrl;
        }
        if (this.LoadedImageUrl != text)
        {
            Uri requestUri = new Uri(HttpContext.Current.Request.Url, base.ResolveClientUrl(text));
            try
            {
                using (WebResponse response = WebRequest.Create(requestUri).GetResponse())
                {
                    System.Drawing.Image image = System.Drawing.Image.FromStream(response.GetResponseStream());
                    this.Width = image.Width;
                    this.Height = image.Height;
                    this.LoadedImageUrl = text;
                }
            }
            catch (Exception)
            {
            }
        }
        base.OnPreRender(e);
    }

问题是base.OnPreReender(e);它一遍又一遍地调用自己。

于 2014-06-03T17:11:17.910 回答