我需要实现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,获取结果并返回到被调用方。
任何人都可以提供任何解决方案吗?
答案 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();
请随时告诉我是否有什么可以帮忙的。