从Docker中的另一个微服务调用微服务不起作用

时间:2019-01-23 13:13:07

标签: c# docker microservices asp.net-core-2.1

我在docker化的应用程序中有两个微服务。一个是Web Api项目,第二个是Web MVC应用程序。我想在MVC应用程序中调用Web API。

注意:我正在使用.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的情况下使用相同的代码,然后从mvc应用程序调用网络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的问题的答案。

Call Microservice from another Microservice within Docker

但是我不明白如何才能将api名称用作此答案中说明的url。当我在网址中使用api名称时是这样的:

https://catalogapi:44398/api/values

它会产生此错误:

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

0 个答案:

没有答案