无法在两个服务之间进行通信

时间:2020-01-29 08:04:14

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

我在Web API中创建了两个Asp.net Core,一个是要在DMZ服务器上部署的包装程序服务,另一个是可以访问我们的DB Non 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;
    }
}

NON-DMZ控制器逻辑

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

更新 这个问题是由于码头工人。当我将两个API都部署到IIS时,它将可以正常工作,但我必须使用Dockers

1 个答案:

答案 0 :(得分:0)

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