停止调试时会发生什么?

时间:2016-04-22 18:52:38

标签: asp.net .net

我有2个ASP.NET应用程序。 1在VB中,1在C#中。

当用户在VB应用程序中使用某些凭据登录时,应该重新路由到C#应用程序。同样,C#应用程序的某些凭据会重新路由到VB应用程序,反之亦然。

VB - > C#有效。此功能由第三方编写。 (C#应用程序基本上只是重写我们的VB应用程序,但更现代。但是,整个包不会被重写。)

我试图反转代码,以便C#应用程序调用数据库中的存储过程来创建令牌,将浏览器重定向到VB应用程序,该应用程序调用过程来获取该令牌并设置一些会话变量

我没有完全正常工作,其中一个主要问题是浏览器根本无法从C#登录页面导航到VB页面。如果我在DB上运行Profiler,我可以看到"加载令牌"正在调用存储过程。这必须意味着代码 正在执行,但浏览器没有正确重定向,对吧?

更重要的是,我发布此问题的原因是,当我停止调试我的应用时,我不明白实际发生了什么。我在调用之后立即设置了一个断点,在DB中创建该令牌。所以我运行我的应用程序,登录,触发断点,我可以在数据库中看到好的数据。如果我立即停止调试,则会调用加载令牌过程 。如何!?

这是代码;

在我的LoginController

public ActionResult ValidateUser(objLogin)
{
    var ds = LoginData.ValidateUser(objLogin);

    string url = "someUrl/" + ds.Tables["Key"].Rows[0][0].ToString();

    System.Web.HttpContext.Current.Response.Redirect(url, true);

    return Json(objLogin, JsonRequestBehavior.AllowGet);
}

该重定向指向VB应用程序中的登录页面,该页面从URL解析出密钥并将 作为参数传递给另一个DB SP ...但是,浏览器永远不会导航我的登录页面,无论我是否停止调试。

坦率地说,我并不完全确定return陈述的作用;如果我尝试进入它,它就会继续,好像我点击了#34; Play"。应用程序恢复控制,只在登录页面发冷。它是第三方重写的一部分。 VB应用程序非常陈旧,非常非结构化。新的C#重写使用MVC。我熟悉这些原则,但我不是专家,特别是在.NET中。

并在LoginData

public DataSet ValidateUser(Login objLogin)
{
    DataSet dsData;

    using (SqlCommand sqlCommand = new SqlCommand("Validate_User_Main")
    {
        // execute this procedure; assign results to dsData
    }

    string authKey = GetAuthKey(dsData.userId);

    DataTable dtTemp = new DataTable("key"); //putting break point here after the key gets created but before the redirect is called in LoginController.ValidateUser
    dtTemp.Columns.Add("Key");

    DataDrow drTemp = dtTemp.NewRow();
    drTemp[0] = authkey;

    dtTemp.Rows.Add(drTemp);

    dsData.Tables.Add(dtTemp);
    return dsData;
}

编辑:如果我在等待断点时关闭浏览器窗口,请停止调试"加载令牌"呼叫未被使用。如果我只是停止调试但是让我的浏览器保持打开状态,则会调用它。所以它必须在幕后重定向"对吧?我不明白......

1 个答案:

答案 0 :(得分:1)

停止调试时,分离调试器。这只是意味着它会停止跟踪正在运行的代码。正如您所见,代码保持运行,但知道您无法设置断点,监视变量等。