我在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
答案 0 :(得分:0)
由于我正在呼叫localhost
与在另一个容器上运行的其他API
通信而发生问题。当我们调用localhost时,第一个容器开始寻找在同一容器上运行的服务。通过使用VM/Local Machine IP
而不是localhost可以避免此问题。