我有两个微服务在我的停靠应用程序。一个是Web API项目,第二个是Web MVC应用程序。我想调用Web API在MVC应用程序。
注意:我使用的是.Net Core 2.1
我是这样打电话的:
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
当我从浏览器调用它的工作很好。即使我使用相同的代码没有docker,然后调用Web API从mvc应用程序它的工作很好。我还启用了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上看到了这个问题的答案。
Call Microservice from another Microservice within Docker
但是我不明白我怎么能只使用API名称作为url,如这个答案中所解释的。当我在url中使用api名称时,如下所示:
https://catalogapi:44398/api/values
它会产生以下错误:
SocketException: No such host is known
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)
1条答案
按热度按时间jaxagkaj1#
Docker合成在您的主机上创建虚拟网络,并且具有这些IP的服务无法从Docker外部路由。
服务可以使用它们的名称
http://running-service/
相互通信。我们可以使用Docker组合文件来初始化服务名称等细节,并使用它来调用其他微服务,例如
http://running-service-1:port/
。