HttpClient.GetAsync调用中的Visual Studio断点未被命中

时间:2016-03-14 20:53:25

标签: c# asynchronous visual-studio-debugging

我正在尝试从.NET Web服务中的测试脚本调试异步调用,但异步调用中的断点永远不会被命中。我甚至尝试在其中放置一个Debugger.Break()。以下是主叫代码......

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(ConfigurationManager.AppSettings["BaseAddress"]);
        string uri = "/api/Rd_Regions";

        // Below is the line of code I want to step into, but it won't step into the 'client.GetAsync(uri)'...
        HttpResponseMessage response = await client.GetAsync(uri);
        if (response.IsSuccessStatusCode)
        {
            // Convert the result into business object
            // Do stuff...
        }
        else do other stuff...

以及断点所在的应该调用的web服务部分在这里,第一个是web api的上下文,后面是被调用的方法。如果它停在任何一个地方,我会很高兴...

public partial class PIMSContext : DbContext
{

    public PIMSContext()

    : base(new OracleConnection(Security.ConfigurationReader.GetAppSetting("PIMS")), true)
    //: base(new OracleConnection(ConfigurationManager.ConnectionStrings["PIMS"].ConnectionString), true) 
etc....

以下是最终调用的方法:

    // GET: api/RD_REGIONS
    public IQueryable<RD_REGIONS> GetRD_REGIONS()
    {
        // I want the debugger to stop here!
        Debugger.Break();
        return db.RD_REGIONS;
    }

我错过了什么吗?是不是可以进入这个异步调用? 任何见解都表示赞赏。

2 个答案:

答案 0 :(得分:1)

忘记更新前面的答案 - 事实证明我在发布模式(VS2015)中意外调试。切换到调试模式修复它 - 所有断点开始按预期运行。

答案 1 :(得分:0)

如果我理解正确的话 - 上面列出的所有断点都没有被击中?不在等待client.GetAsync(uri);在Web服务GetRD_REGIONS()中都没有?在client.GetAsync没有到达之后代码是否跟随?

如果这是真的 - 也许这种方法永远不会完成?

await client.GetAsync(uri);

可能你在这个地方遇到例外。尝试使用try / catch包围您的GetAsync方法,并将断点放在catch块中。像这样:

...
HttpResponseMessage response = null;
try {
  response = await client.GetAsync(uri);
} 
catch (Exception e) {
  throw e; //breakpoint goes here
}
...

有时,由于您的方法是异步的,未处理的异常无法通过调试器或事件日志进行全局注册。您只能使用try / catch获得此异常。