2017-04-18 176 views
2

我正在嘗試從服務讀取響應XML到類中以使用它。 如果我使用這個網址https://btsvcs.college.edu/HR/Employee/ID/[email protected]從.NET客戶端調用Web API(C#)

響應XML將是這樣的:

<Data> 
    <Record id="PA01051" rowOrder="0"> 
    <employee_id>20000343</employee_id> 
    </Record> 
</Data> 

我不得不創建我的類與響應XML相同。

這是類:

public class GetEmployeeIdByEmail 
{ 
    [DataContract(Namespace = "")] 
    public class Record 
    { 

     [DataMember(Order = 0)] 
     public string employee_id { get; set; } 
    } 

    [DataContract(Namespace = "")] 
    public class Data 
    { 
     [DataMember(Order = 0)] 
     public Record Record { get; set; } 
    } 
} 

之後,我不得不做出一個函數用來讀取XML的HttpClient

這是函數:

public async Task<GetEmployeeIdByEmail> GetEmployeeIdByEmail() 
{ 
    var client = new HttpClient(); 
    var url = "https://btsvcs.college.edu/HR/Employee/ID/[email protected]"; 
    client.BaseAddress = new Uri(url); 
    client.DefaultRequestHeaders.Accept.Clear(); 

    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml")); 
    var responseMessage = await client.GetAsync(url); 
    GetEmployeeIdByEmail responseData = null; 

    if (responseMessage.IsSuccessStatusCode) 
    { 
     responseData = await responseMessage.Content.ReadAsAsync<GetEmployeeIdByEmail>(); 
    } 

    return responseData; 
} 

如果我做一個關於這個功能的斷點和一步一步的跟蹤總是回到網站閱讀這行後的xml

var responseMessage = await client.GetAsync(url);並且沒有迴應完成調試。

我不知道是什麼原因。

+0

異步應用程序是否拋出一個錯誤?它掛了嗎? 「沒有迴應」是什麼意思?澄清。 – Nkosi

+0

檢查您的網址。你的代碼工作正常。使用「https://duckduckgo.com」進行測試可能是「btsvcs.college.edu」的名稱解析。 – ivw

+0

@Nkos他們也不例外,應用程序仍然重新加載。 – Hansy

回答

0

至於@ivw答案用這個link

這有助於我用寫在問題的代碼。

responseMessage = client.GetAsync(url).Result; 

而不是

responseMessage = await client.GetAsync(url); 

並從函數頭

1
HttpResponseMessage responseMessage; 
try 
{ 
    responseMessage = await client.GetAsync(url); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 
+0

此外,瀏覽器仍然在加載 – Hansy

+0

看看這裏更改異常設置可能有助於獲得有關該問題的更多詳細信息。 http://stackoverflow.com/questions/22024856/dns-resolution-failure-in-httpclient-throws-unhandled-aggregateexception – ivw

+0

這可以幫助我非常感謝你 – Hansy

0

的這裏的原因是,client.GetAsync是異步的方法,使async I/O到網絡來執行該請求,並接收響應。當這種異步操作發生時,在方法調用之前有一個關鍵字await,控制權返回由堆棧返回給方法的調用者。當客戶端獲得響應方法時,將從其離開的地方恢復。

嘗試在await之後的下一行設置斷點,並且一旦執行請求,就會命中。

+0

它不會到下一個點,但做完後。結果;並刪除它正在正常工作 – Hansy

+0

@Hansy,因爲你使它同步。你是否試圖在下一行放置一個斷點? –

+0

是的,不起作用 – Hansy