2017-04-18 171 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