为什么在IIS托管的Web应用程序中没有发生方法调用?

时间:2015-06-12 00:48:30

标签: asp.net iis

我有一个非常有趣的问题,我有一个网页,按钮点击它正在检查要打印的标签数量,并警告用户是否超过一定数量的标签(100)。这在Visual Studio中完全正常,但IIS中没有发生验证方法调用。我已经在IIS中反编译了DLL,以确保方法存在,并且在按钮点击时可以通过逻辑调用它。在IIS托管应用程序中,无论我打印多少标签,它都不会警告用户并直接调用PrintLabels()方法。但为什么 ?我曾尝试使用Attach调试应用程序,但IIS应用程序从不进入验证调用方法。 Visual Studio和IIS应用程序都连接到同一个数据库,因此它具有相同的数据。

 protected void btnPrintLabel_Click(object sender, EventArgs e)
        {
            string result = ValidatePrintLimit(); // This call is not happening in IIS or somehow result is always null. 
            if (string.IsNullOrEmpty(result))
            {
                PrintLabels();
            }
            else
            {
                infoWarning.InnerHtml = result;
                upnlWarning.Update();
                ScriptManager.RegisterStartupScript(this, this.GetType(), "ToggleScript", "window.setTimeout('open_warning_info_box()',500);", true);

            }
        }

    protected string ValidatePrintLimit()
    {
        string result = "";
        if (!string.IsNullOrEmpty(txtLastKeyNo.Text.Trim()) && !string.IsNullOrEmpty(txtFirstKeyNo.Text.Trim()))
        {
            int lastKeyNo = int.Parse(txtLastKeyNo.Text.Trim());
            int startKeyNo = int.Parse(txtFirstKeyNo.Text.Trim());

            BL.PrintLimit objPL = new PrintLimit();
            DataTable allLimits = objPL.GetPrintLimits();
            int upperLimit = 0;
            int warningLimit = 0;
            if (allLimits.Rows.Count > 0)
            {
                warningLimit = Int32.Parse(allLimits.Rows[0]["WarningLimit"].ToString());
                upperLimit = Int32.Parse(allLimits.Rows[0]["UpperLimit"].ToString());
            }
            if ((lastKeyNo - startKeyNo) > warningLimit) result = "Number of label print requested : " + (lastKeyNo-startKeyNo) + "<br/><br/>Number of labels to print exceeds warning limit of : " + warningLimit + "<br/><br/>Do you want to proceed ? ";
        }
        return result;
    }

1 个答案:

答案 0 :(得分:0)

您已经部署了过期代码,这是Visual Studio调试器行为也证实的唯一可能的解释。

因为您说您检查的程序集确实有方法调用,所以让我们排除构建/发布失败或者您复制了错误的构建(例如构建为调试但从版本文件夹中获取文件)。

  1. 检查您正在查看的目录是否真的是在IIS中配置的目录。
  2. 如果网站正确,您可以通过从文件夹中删除所有文件然后尝试访问该应用来执行此操作。
  3. 没有GAC冲突,请检查您的dll是否未在GAC中重新注册(怀疑是这种情况,但看起来不会受到伤害)。
  4. 没有IIS缓存,重新启动IIS以查看它是否没有持有任何缓存的程序集。