#c# #docker #asp.net-core #.net-core #microservices
#c# #docker #asp.net-core #.net-ядро #микросервисы
Вопрос:
Я работаю над ASP.NET Основное приложение с архитектурой микросервисов на основе docker. Когда я начинаю отладку своего приложения с помощью IIS Express, я продолжаю получать ошибку сокета при первой загрузке. После обновления страницы все работает нормально. Мои инстинкты подсказывают мне, что проблема в том, что я пытаюсь отправить http-запрос к службе до запуска контейнера docker, но у меня есть предложения depends_on в моем файле docker_compose. Любая помощь была бы высоко оценена.
Это та часть, которая выдает ошибку (вызывается в Home.Действие с индексом):
HttpResponseMessage response = await _httpClient.GetAsync(_appSettings.Value.ListingsAPIUrl "/Listings");
Вот мой docker-compose:
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;
}
Комментарии:
1. попробуйте немного изменить. в вашем docker-compose я вижу, что ваш webmvc зависит только от listing.api. Добавьте sql.data тоже в разделе зависит от.
2. Извините, забыл упомянуть в исходном сообщении, пробовал, что уже не влияет :/