Веб-приложение ASP.NET Core-3.0Preview 5 с фоновой службой работает локально, но не работает при запуске в контейнере док-станции и при отсутствии ошибок - PullRequest
0 голосов
/ 14 мая 2019

действительно странная проблема с моим приложением при использовании 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();
...