Errore in upload

di il
8 risposte

Errore in upload

Salve a tutti, ho fatto un programmino in asp con net 5.0 per caricare e scaricare dei file in un sito, quando lo testo in locale funziona perfettamente, invece se lo pubblico mi dà errore
HTTP Error 502.3 - Bad Gateway
The connection with the server was terminated abnormally
leggendo in giro ho visto che potrebbe esser un errore di request timout che di default è 2 minuti, come il tempo che passa prima di andare in errore,
ho provato a forzare il web.config che si crea dopo la pubblicazione, aggiugendo il request timout
questo è il web.config che si crea dopo la pubblicazione
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\Cedolini.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 0f7563e2-0f2e-45d2-841b-3b0fae0ac0a8-->
io l'ho modifcato così ed aggiornato tramite l ftp
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore requestTimeout="01:00:00" processPath=".\Cedolini.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 0f7563e2-0f2e-45d2-841b-3b0fae0ac0a8-->

ma non ho sortito nessun effetto il codice del controller dove avviene l 'errore è

        //UPLOAD MULTIPLA
        [Authorize]
        [HttpPost]
        public async Task<IActionResult>Index(List<IFormFile> files, int CodCliente)
        {
            ModelState.AddModelError("Error", "Check ID");

            if (files == null || files.Count == 0)
                return Content("Cedolino NON Selezionato");

            long size = files.Sum(f => f.Length);
            var filePaths = new List<string>();
            
            foreach (var formFile in files)
            {
                if (formFile.Length > 0)
                {
                    // full path to file in temp location
                    var filePath = Path.Combine(WebHostEnvironment.WebRootPath, "ArchivioDocumenti");
                    filePaths.Add(filePath);
                    var fileNameWithPath = string.Concat(filePath, "\\", formFile.FileName);
                    string filename = formFile.FileName;
                    
                    if (System.IO.File.Exists(fileNameWithPath))
                    {
                        _context.Database.ExecuteSqlRaw("DELETE FROM ElencoCedolini WHERE(NomeDocumento = '" + filename + "')");
                        System.IO.File.Delete(fileNameWithPath);
                    }

                    using (var stream = new FileStream(fileNameWithPath, FileMode.Create))
                    {
                        await formFile.CopyToAsync(stream);
                    }

                    CodCliente = 0;
                    await _context.Database.ExecuteSqlRawAsync("INSERT INTO ElencoCedolini (NomeDocumento, TipoDocumento, Cliente, CodiceCliente, CodiceFiscale, Anno , Inquadramento, " +
                        "Mese,Sviluppo, Cantiere, Listino, ProgrListino, Def) " +
                        "SELECT N'" + filename +"', N'" +filename.Substring(0, 3) + "', N'" + filename.Substring(3, 3) + "'," + CodCliente + ", N'" + filename.Substring(6, 16) +"',"+ 
                        "" + Int32.Parse(filename.Substring(22, 4)) + ",N'" + filename.Substring(26, 3) + "'," + Int32.Parse(filename.Substring(29, 2)) + ","+
                        ""+ Int32.Parse(filename.Substring(31, 2)) + "," + Int32.Parse(filename.Substring(33, 4)) + "," + Int32.Parse(filename.Substring(37, 3)) + "," + 
                        "" +Int32.Parse(filename.Substring(41, 1)) + "," + Int32.Parse(filename.Substring(42, 3)) + ";");
                }
            }
            ViewBag.Message = string.Format("Cedolini Importati Correttamente!", DateTime.Now.ToString());
            
            return View("Index");
        }
vorrei capire come impostare il request time che di default è 2 minuti in circa 10 (se è questo l errore)
grazie

8 Risposte

  • Re: Errore in upload

    "L'attributo requestTimeout non viene applicato all'hosting in-process." https://docs.microsoft.com/it-it/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.1#in-process-hosting-model
  • Re: Errore in upload

    Non ho capito, il problema non è il request timeout?
  • Re: Errore in upload

    Il "problema" è che avendo settato come hostingmodel inprocess l'attributo requestTimeout non viene considerato , ti consiglierei di usare Kestrel come webserver poichè è molto configurabile via codice (vedi https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1) ed al limite usare IIS come reverse proxy ,l'ultimo passaggio non è ovviamente obbligatorio in quanto dalla versione 2.1 (o 2.2 non ricordo) Kestrel è considerato abbastanza robusto da essere esposto direttamente sul web
    per vedere la differenza tra "in process" ed "out of process" potresti (dovresti) leggere con attenzione questo "tutorial" di cui ti ho inviato il link ( https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.1#in-process-hosting-model )
  • Re: Errore in upload

    Quindi per evitare l' errore dovrei utilizzare il Kestrell, essendo molto bianco vorrei capire che modifiche fare nell'app?
  • Re: Errore in upload

    Allora guardando in giro ho fatto questi cambiamenti
    su program ho messo
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
          
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                .ConfigureServices((context, services) =>
                {
                    services.Configure<KestrelServerOptions>(
                    context.Configuration.GetSection("Kestrel"));
                })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureKestrel(serverOptions =>
                {
                    serverOptions.Limits.MaxConcurrentConnections = 100;
                    serverOptions.Limits.MaxConcurrentUpgradedConnections = 100;
                    serverOptions.Limits.MaxRequestBodySize = 10 * 1024;
                    serverOptions.Limits.MinRequestBodyDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
                    serverOptions.Limits.MinResponseDataRate = new MinDataRate(bytesPerSecond: 100, gracePeriod: TimeSpan.FromSeconds(10));
                    serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20);
                    serverOptions.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(10);
                });
    
                webBuilder.UseStartup<Startup>();
    
            });
        }
    }
    
    su Startup ho aggiunto
    
            public void ConfigureServices(IServiceCollection services)
            {
    	...
                services.Configure<KestrelServerOptions>(
                        Configuration.GetSection("Kestrel"));
    
                });
    
    e su appsettings.json ho aggiunto
    
        "Kestrel": {
          "Limits": {
            "MaxConcurrentConnections": 100,
            "MaxConcurrentUpgradedConnections": 100
          },
          "DisableStringReuse": true
        },
    
    nel file cproj
    l ho lasciato così
    
      <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
      </PropertyGroup>
    
    perchè se aggiungo
    
      <PropertyGroup>
        <TargetFramework>net5.0</TargetFramework>
        <AspNetCoreHostingModel>OutOfProcces</AspNetCoreHostingModel>
      </PropertyGroup>
    
    quando lo pubblico su register mi da errore

    Dove sto sbagliando?
    Grazie
  • Re: Errore in upload

    Non saprei , sei sicuro che register ( il fornitore di hosting? ) gestisca .net core 5.0?
    se la pubblichi sul tuo pc in locale funziona ? (intendo proprio pubblicazione ,non esecuzione in debug)
    prova a vedere se su questo sito di hosting gratuito funziona www.somee.co ?
  • Re: Errore in upload

    Hai ragione gian82, mi hai acceso la lampadina avevo dimenticato che register, per lavorare con un sottodominio in net 5.0 bisognava chiederlo, l ho provato con un sottodominio in net 5.0 e funziona! Grazie
  • Re: Errore in upload

Devi accedere o registrarti per scrivere nel forum
8 risposte