Я работаю над приложением ASP.NET Core с архитектурой микросервисов на основе докера. Когда я начинаю отлаживать приложение с помощью IIS Express, я получаю сообщение об ошибке при первой загрузке. После обновления страницы все работает нормально. Мои инстинкты говорят мне, что проблема в том, что я пытаюсь сделать http-запрос к сервису до запуска контейнера Docker, но в моем файле docker_compose есть предложения depen_on. Любая помощь будет высоко ценится.
Это та часть, которая выдает ошибку (вызывается в Home.Index Action):
HttpResponseMessage response = await _httpClient.GetAsync(_appSettings.Value.ListingsAPIUrl + "/Listings");
Вот мой докер-композитор:
services:
sql.data:
image: microsoft/mssql-server-linux:2017-latest
listings.api:
image: ${REGISTRY:-listings}/listings.api:${TAG:-latest}
build:
context: .
dockerfile: src/Services/Listings/Listings.API/Dockerfile
depends_on:
- sql.data
webmvc:
image: ${DOCKER:-listings}/webmvc:${TAG:-latest}
build:
context: .
dockerfile: src/WebApps/WebMVC/Dockerfile
depends_on:
- listings.api
Вот мой Program.cs:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
вот соответствующие части моего Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services
.AddCustomMVC(Configuration)
.AddAppSettings(Configuration)
.AddCustomHttpClients(Configuration);
//.AddCustomAuthentication(Configuration, Environment);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Пользовательские расширения при запуске:
public static IServiceCollection AddCustomMVC(this IServiceCollection services, IConfiguration configuration)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
return services;
}
public static IServiceCollection AddAppSettings(this IServiceCollection services, IConfiguration configuration)
{
services.AddOptions();
services.Configure<AppSettings>(configuration);
return services;
}
public static IServiceCollection AddCustomHttpClients(this IServiceCollection services, IConfiguration configuration)
{
services.AddHttpClient();
return services;
}