Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Docker中的另一个微服务调用微服务不工作_C#_Docker_Microservices_Asp.net Core 2.1 - Fatal编程技术网

C# 从Docker中的另一个微服务调用微服务不工作

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

我的停靠应用程序中有两个微服务。一个是WebAPI项目,另一个是WebMVC应用程序。我想在mvc应用程序中调用web api

注意:我使用的是.NETCore2.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
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
文件启动的。