Невозможно установить связь между двумя службами - PullRequest
1 голос
/ 29 января 2020

Я создал два Web API в Asp.net Core, один из них - Wrapper Service, который будет развернут на сервере DMZ, а другой - базовый сервис, имеющий доступ к нашей БД Non DMZ. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу общаться между двумя службами.

Оба работают на локальной машине через докеры. Когда я пытаюсь запустить базовую службу, работающую по URL: https://localhost:56788/Rewards thorugh HttpClient/WebRequest, я получаю сообщение

No connection could be made because the target machine actively refused it.

DMZ Logi Controller Logi c

[Route("[controller]")]
[ApiController]
public class RewardsController : ControllerBase
{
    [HttpGet]
    public string Get()
    {
        string response = string.Empty;
        //using (var client = new HttpClient())
        //{
        //    client.BaseAddress = new Uri("http://localhost:5000/");
        //    //HTTP GET
        //    var responseTask = client.GetAsync("Rewards");
        //    responseTask.Wait();

        //    var result = responseTask.Result;
        //    if (result.IsSuccessStatusCode)
        //    {
        //        response = result.ToString();
        //    }
        //    else //web api sent error response 
        //    {
        //        //log response status here..
        //        response = "Error";
        //    }
        //}
        string sURL = "https://localhost:56788/Rewards";

        WebRequest wrPostURL = WebRequest.Create(sURL);

        wrPostURL.Method = "GET";
        ServicePointManager.ServerCertificateValidationCallback +=     (sender, cert, chain, sslPolicyErrors) => true;

        using (HttpWebResponse webresponse = wrPostURL.GetResponse() as HttpWebResponse)
        {
            Encoding enc = System.Text.Encoding.GetEncoding("utf-8");
            StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream(), enc);
            var jsonResponse = loResponseStream.ReadToEnd();
            loResponseStream.Close();
            webresponse.Close();
        }
        return response;
    }
}

Логика контроллера NON-DMZ c

[Route("[controller]")]
[ApiController]
public class RewardsController : ControllerBase
{
    [HttpGet]
    public string Get()
    {
        return "Hello";
    }
}

Обновление Эта проблема связана с докерами. Когда я разверну оба API в IIS, он будет работать нормально, но я должен сделать это с помощью Dockers

1 Ответ

0 голосов
/ 30 января 2020

Проблема возникает из-за того, что я звонил localhost для связи с другими API, работающими в другом контейнере. Когда мы вызываем localhost, первый контейнер начинает поиск службы, работающей в том же контейнере. Используя VM/Local Machine IP вместо localhost, можно избежать этой проблемы.

...