如何在WCF服务中进行REST API调用?

时间:2019-10-10 14:24:18

标签: c# rest wcf

我需要实现WCF服务,该服务在被调用时会调用Rest API。 例如这是服务模型接口

using System.ServiceModel;  
namespace Calc  
{  
 [ServiceContract]  
 public interface ICalcService  
 {  
  [OperationContract]  
  string getresponse(int id);  

 }  
}  

这是实现

 namespace Calc  
    {  
     [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]  
     public class CalcService: ICalcService  
     {  
      public string getresponse(int id)  
      {  

//what I want to do is this

           HttpClient http = new HttpClient();
            string baseUrl = "https://restcountries.eu/rest/v2/name/";
            string queryFilter = "?fields=name;capital;currencies";
            Console.WriteLine("Enter your country name:");
            string searchTerm = Console.ReadLine();
            string url = baseUrl + searchTerm + queryFilter;
            HttpResponseMessage response = await http.GetAsync(new Uri(url)).Result;
            return response.ToString();

      }  

     }  
    }  

我面临的问题是,我们需要在调用rest API时使用await。但是为此,我们需要将方法“ getresponse”更改为异步,并且由于定义是从接口ICalcService派生的,因此该方法不起作用。我尝试在接口中更改相同的方法定义,但是再次不允许这样做。

这里有什么解决方案?

我想要的是对WCF服务的简单调用,该服务本身调用REST API,获取结果并返回到被调用方。

任何人都可以提供任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您要异步执行该方法,我对您的问题有些困惑。我们必须修改服务合同。

[OperationContract]
Task<string> GetResponse(int id);

public async Task<string> GetResponse(int id)
{
    Task<string> task = new Task<string>(() =>
      {
          Thread.Sleep(1000);
          return "Hello";
      });
    task.Start();

    return await task;
}

如果我们想像您一样同步执行该方法。

HttpResponseMessage response = await http.GetAsync(new Uri(url)).Result;
            return response.ToString();

请随时告诉我是否有什么可以帮忙的。