#.net #iis #asp.net-core #asp.net-core-webapi
#.net #iis #asp.net-core #asp.net-core-webapi
Вопрос:
Я работаю над простым .net core API и заметил странное поведение, которое не могу объяснить:
API работает нормально до точки (40-50 вызовов), когда все вызовы завершаются неудачей и возвращают ошибку HTTP 502.3 — Неисправный шлюз после тайм-аута.
После некоторых исследований я выяснил, что это поведение не появляется, когда я удаляю ASPNETCORE_ENVIRONMENT (установленное для разработки) в файлах конфигурации.
Итак, конкретно, какие различия подразумевают, что моя среда ASPNETCORE_ENVIRONMENT настроена на разработку? Как я могу заставить его работать с этим параметром?
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
var dbString = Configuration["Database:ConnectionString"];
services.AddScoped<ISearchEngineRepository, SearchEngineRepository>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddDbContext<VvpDbContext>(options => options.UseSqlServer(dbString), ServiceLifetime.Transient);
services.AddSingleton(Configuration);
services.AddCors();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseCors(options => options.WithOrigins("http://localhost:4200").AllowAnyMethod());
}
else
{
app.UseHsts();
}
app.UseMvc();
}
}
Комментарии:
1. Это просто переменная среды. Значение само по себе ничего не делает. Что касается того, какое влияние другое значение может оказать на ваше приложение, это невозможно сказать, не видя код вашего приложения, в частности ваш
Startup.cs
, хотя даже этого может быть недостаточно. Все виды вещей могут зависеть от определенного значения среды, но по умолчанию ничего не обязательно.2. Я вижу. Насколько я помню, я не указываю никаких настроек на основе этой переменной (кроме env. Условие IsDevelopment() в startup.cs, которое я отредактировал в своем посте выше, останется таким же, если я его удалю, хотя …). Я думаю, что это, возможно, из-за IIS, но я понятия не имею, используется ли там эта переменная и как именно…
3. Это не так.
ASPNETCORE_ENVIRONMENT
Переменная среды специально используетсяIHostingEnvironment
абстракцией и как таковая всегда используется на программном уровне, то есть является своего рода условным значением в вашем реальном коде. IIS ничего этого не знает и не заботится об этом.4. Теперь мое внимание сосредоточено на папке IISSupport в папке bin API. В нем есть файл,
IISExeLauncherArgs.txt
в которомASPNETCORE_ENVIRONMENT
упоминается. После удаления папки bin и obj и регенерации решения, кажется, что оно работает нормально… Но все еще не могу объяснить, почему.