2016-03-14 131 views
0

我试图从调试测试脚本我的.NET Web服务中的异步调用,但我的异步调用内部的断点从来没有击中。我甚至尝试在其中放置一个Debugger.Break()。下面是调用代码...Visual Studio中断点呼叫未击中

 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; 
    } 

我缺少的东西?是不可能进入这个异步调用? 任何洞察力表示赞赏。

+0

你在使用测试方法进行调试吗?或者通过网页浏览器? – aMazing

+0

是的,我正在通过Visual Studio Online 2015中的测试方法调试该服务。我在调试模式下建立并停止在异步调用之前的行,并且当我尝试F11(步入)异步调用时,它只是进入下一行。 – ingep

回答

0

如果我理解正确的话,你 - 上面列出的所有的断点不会击中?不在等待client.GetAsync(uri);在Web服务GetRD_REGIONS()中都没有?客户端.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才能得到这个异常。

+0

那被击中的唯一的断点是在这条线的人,这就是我尝试踏入,它只是几步之遥了... HttpResponseMessage响应=等待client.GetAsync(URI); 我试过你的建议谢谢...不幸的是,没有错误抛出,response.IsSuccessStatusCode返回false并且代码继续。 – ingep

+0

事实上,你没有例外意味着,HttpClient.GetAsync工作正常。看看调试器中的响应对象。哪个http状态码在那里? 404? 500?我想,你的第二个应用程序不能处理请求。在web-api中可能有路由/ ActionFilter错误?尝试检查url /路由和响应对象。 –

+0

响应错误是404.我认为问题是与连接有关,因为如果您查看连接到数据库的上下文代码行,您会在下面看到注释行,来自connectionString的Oracle连接...当它正在做它的工作时,但我现在需要使用ConfigurationReader从一个密钥中获得连接...这是我更改的唯一行,并且从此破坏。我无法走进这条线,看看它为什么被打破。是不可能进入GetAsync()调用看看它在做什么? – ingep

0

忘记的答案早些时候更新 - 原来我在释放模式(VS2015)被意外调试。切换到调试模式修复了它 - 所有断点都开始按照预期运行。