我正在尝试从.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;
}
我错过了什么吗?是不是可以进入这个异步调用? 任何见解都表示赞赏。
答案 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获得此异常。