从C#应用程序调用多个Web服务

从C#应用程序调用多个Web服务

问题描述:

我想在一个C#应用程序中调用多个服务。来自一项服务的响应作为输入参数传递给其他服务。作为响应第一个服务是一个数字数组,调用其他服务在for循环中像下面从C#应用程序调用多个Web服务

public async Task<IHttpActionResult> Get() 
{ 
...... 
var response = await iLab_client.GetAsync(uri_serviceid); 
var datafile = await response.Content.ReadAsStringAsync(); 
var returnDataObj = JsonConvert.DeserializeObject<Models.ReqDTO.RootObject>(datafile); 
foreach (var req in returnDataObj.il_response.svc_req) 
{ 
    int request_id = req.id; 

    //Calling the other service passing the input parameter 

    using (var iLab_client_request = new HttpClient()) 
    { 
    string request_Uri = BaseURL_iLab + "svc_req/"+request_id+"/c_forms.json"; 
    Uri uri_request = new Uri(request_Uri); 
    client_request.BaseAddress = uri_request; 
    client_request.DefaultRequestHeaders.Accept.Clear(); 
    client_request.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    client_request.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); 
    var request_response = await client_request.GetAsync(uri_request); 
    var responsefile = await request_response.Content.ReadAsStringAsync(); 
    var request_returnDataObj = JsonConvert.DeserializeObject<Models.DTO.RootObject>(responsefile); 
    return Ok(request_returnDataObj); 
    }}} 

它trows错误说'GetResponseFromiLabAPIController.Get()': not all code paths return a value我明白,我需要创建可以使用存储响应的对象Add()和从for循环外部返回它。但我不确定应该存储哪些对象类型,可以存储来自每个服务调用的所有响应。

您可以将回复存储在列表中。

public async Task<List<IHttpActionResult>> Get() 
{ 
    ...... 

    var responses = new List<IHttpActionResult>>(); 
    var response = await iLab_client.GetAsync(uri_serviceid); 
    var datafile = await response.Content.ReadAsStringAsync(); 
    var returnDataObj = JsonConvert.DeserializeObject<Models.ReqDTO.RootObject>(datafile); 
    foreach (var req in returnDataObj.il_response.svc_req) 
    { 
     int request_id = req.id; 

     //Calling the other service passing the input parameter 

     using (var iLab_client_request = new HttpClient()) 
     { 
      string request_Uri = BaseURL_iLab + "svc_req/"+request_id+"/c_forms.json"; 
      Uri uri_request = new Uri(request_Uri); 
      client_request.BaseAddress = uri_request; 
      client_request.DefaultRequestHeaders.Accept.Clear(); 
      client_request.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      client_request.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); 
      var request_response = await client_request.GetAsync(uri_request); 
      var responsefile = await request_response.Content.ReadAsStringAsync(); 
      var request_returnDataObj = JsonConvert.DeserializeObject<Models.DTO.RootObject>(responsefile); 
      responses.Add(request_returnDataObj); 
     } 
    } 
    return responses; 
}