代码之家  ›  专栏  ›  技术社区  ›  Rana Mujahid

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

  •  0
  • Rana Mujahid  · 技术社区  · 7 年前

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

    注意:我使用的是.Net Core2.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应用程序调用WebAPI,也可以正常工作。 我还启用了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)
    
    0 回复  |  直到 7 年前
    推荐文章