действительно странная проблема с моим приложением при использовании asp.net-core 3.0 Preview 5.
Когда я запускаю приложение локально, приложение работает отлично.
При запуске в Docker-контейнере код останавливается в точке, где он вызывает класс контекста для возврата данных. Поэтому я не уверен, есть ли проблема при вызове данных из базы данных, но появляются ошибки.
Любая помощь будет великолепна.
Код ниже:
Файл Docker:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0-preview5 AS base
WORKDIR /app
EXPOSE 5000
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100-preview5 AS build
WORKDIR /src
COPY ["Processor.ApplicationAPI/Processor.ApplicationAPI.csproj", "Processor.ApplicationAPI/"]
COPY ["Processor.Storage/Processor.Storage.csproj", "Processor.Storage/"]
COPY ["Processor/Processor.csproj", "Processor/"]
RUN dotnet restore "Processor.ApplicationAPI/Processor.ApplicationAPI.csproj"
COPY . .
WORKDIR "/src/Processor.ApplicationAPI"
RUN dotnet build "Processor.ApplicationAPI.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "Processor.ApplicationAPI.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Processor.ApplicationAPI.dll"]
Startup.cs
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
services.AddSingleton<IHostedService, EventService>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub<TransactionHub>("/hubs/transactions");
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
}
Кусок кода, в котором приложение останавливается в Docker-контейнере:
using (var context = contextFactory.CreateContext())
{
settings = context.ProcessorSettings.FirstOrDefault();
lastblock = Convert.ToInt64(context.Blocks.OrderByDescending(m => m.BlockNumber).FirstOrDefault().BlockNumber);
Console.WriteLine("Last Block:" + lastblock);
}
Ожидаемые результаты - вернуть данные и продолжить работу приложения.
Фактические результаты: останавливается и зависает на следующем фрагменте кода:
settings = context.ProcessorSettings.FirstOrDefault();