【问题标题】:Unable able to communicate between two services无法在两个服务之间进行通信
【发布时间】:2020-05-14 16:40:53
【问题描述】:

我在Asp.net Core 中创建了两个Web API,一个是要部署在DMZ 服务器上的包装服务,另一个是可以访问我们的非DMZ 数据库的核心服务。我面临的问题是我无法在两个服务之间进行通信。

两者都通过 docker 在本地机器上运行。当我尝试点击在 url 上运行的核心服务时:https://localhost:56788/Rewards thorugh HttpClient/WebRequest 我收到消息

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

DMZ 控制器逻辑

[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;
    }
}

非 DMZ 控制器逻辑

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

更新 这个问题是由于码头工人。当我将两个 API 部署到 IIS 时,它会正常工作,但我必须使用 Docker 来完成

【问题讨论】:

    标签: asp.net docker asp.net-core asp.net-web-api


    【解决方案1】:

    由于我调用localhost 与在另一个容器上运行的其他API 通信,因此出现问题。当我们调用 localhost 时,第一个容器开始寻找在同一个容器上运行的服务。通过使用VM/Local Machine IP 而不是 localhost 可以避免问题。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2020-09-04
      • 2010-09-29
      • 2018-09-07
      • 2018-01-28
      • 2019-05-12
      • 1970-01-01
      • 2016-01-08
      • 2020-05-28
      相关资源
      最近更新 更多