C# 从Docker中的另一个微服务调用微服务不工作
我的停靠应用程序中有两个微服务。一个是WebAPI项目,另一个是WebMVC应用程序。我想在mvc应用程序中调用web api 注意:我使用的是.NETCore2.1 我是这样打电话的:C# 从Docker中的另一个微服务调用微服务不工作,c#,docker,microservices,asp.net-core-2.1,C#,Docker,Microservices,Asp.net Core 2.1,我的停靠应用程序中有两个微服务。一个是WebAPI项目,另一个是WebMVC应用程序。我想在mvc应用程序中调用web api 注意:我使用的是.NETCore2.1 我是这样打电话的: using (var client = new HttpClient()) { try { var res = await client.GetStringAsync
using (var client = new HttpClient())
{
try
{
var res = await
client.GetStringAsync("http://localhost:44398/api/values");
return Ok(res);
}
catch (Exception ex)
{
throw ex;
}
}
但它给出了一个错误:
An unhandled exception occurred while processing the request.
SocketException: No connection could be made because the target machine
actively refused it
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)
HttpRequestException: No connection could be made because the target
machine actively refused it
WebMVCApp.Controllers.HomeController.Index() in HomeController.cs, line 27
SocketException: No such host is known
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)
当我从浏览器打电话时,它工作正常。即使我在没有docker的情况下使用相同的代码,然后从mvc应用程序调用web api,也可以正常工作。
我还启用了CORS:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors("CorsPolicy");
app.UseHttpsRedirection();
app.UseMvc();
}
请帮我解决这个问题。我已经花了很多时间来解决这个问题,但我无法理解是什么问题
我还阅读了关于stackoverflow的这个问题的答案
但我不明白我怎么能像这个答案中解释的那样,只用api名称作为url。当我在url中使用api名称时,如下所示:
https://catalogapi:44398/api/values
它会产生以下错误:
An unhandled exception occurred while processing the request.
SocketException: No connection could be made because the target machine
actively refused it
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)
HttpRequestException: No connection could be made because the target
machine actively refused it
WebMVCApp.Controllers.HomeController.Index() in HomeController.cs, line 27
SocketException: No such host is known
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)
你们是如何把集装箱下水的?他们需要在相同的Docker网络上进行DNS查找;如果它们是从同一个
docker compose.yml
文件启动的,您应该会自动执行此操作。是@DavidMaze所有容器都是从同一个docker compose.yml
文件启动的。