Вызов микросервиса из другого микросервиса в Docker не работает - PullRequest
0 голосов
/ 23 января 2019

В моем докеризованном приложении есть два микросервиса. Одним из них является Web Api Project, а вторым - приложение Web MVC. Я хочу вызвать веб-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

Когда я звоню из браузера, все работает нормально. Даже если я использую тот же код без докера, а затем вызываю веб-API из mvc app, он работает нормально. Я также включил 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.

Вызовите микросервис из другого микросервиса в Docker

Но я не могу понять, как я могу использовать только имя API в качестве URL, как объяснено в этом ответе. когда я использую имя API в URL, как это:

https://catalogapi:44398/api/values

Выдает эту ошибку:

SocketException: No such host is known
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port, 
CancellationToken cancellationToken)
...