2016-03-14 93 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)被意外調試。切換到調試模式修復了它 - 所有斷點都開始按照預期運行。