Как сделать вызов REST API в службе WCF? - PullRequest
0 голосов
/ 10 октября 2019

Мне нужно реализовать службу WCF, которая при вызове вызывает 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();

      }  

     }  
    }  

Проблема, с которой я сталкиваюсь, заключается в том, что нам нужно использовать await при вызове API покоя. Но для этого нам нужно изменить метод «getresponse» на асинхронный, и это не работает, поскольку определение получено из интерфейса ICalcService. Я попытался изменить то же самое определение метода в интерфейсе, но это снова было запрещено.

Что может быть решением здесь?

Что я хочу, так это простой вызов моей службы WCFкоторый сам вызывает REST API, получает результат и возвращает вызываемому объекту.

Кто-нибудь может предложить какое-либо решение?

1 Ответ

0 голосов
/ 11 октября 2019

Я немного запутался в вашем вопросе, если вы хотите выполнить метод асинхронно. Мы должны изменить договор на обслуживание.

[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();

Не стесняйтесь, дайте мне знать, если есть что-тоЯ могу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...