65 messaggi dal 06 gennaio 2019
Buongiorno a tutti, scusate per il titolo poco esaustivo ma sono nel panico.
L'applicazione che sto sviluppando, che fino a qualche settimana fa non aveva problemi sulla fase di registrazione dell'utente, adesso mi sta dando un problema che durante il debug non si verifica.
In buona sostanza in fase di sviluppo, debuggo il codice e non ho alcun problema mentre in produzione mi restituisce l'errore relativo ad una stringa di input che non ha un formato corretto.
E da stanotte che sto provando e riprovando a capire da cosa derivi il problema e sarà la stanchezza ma proprio non lo trovo.
Vi riporto l'errore generato in produzione:

Server Error in '/' Application.
Input string was not in a correct format.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: Input string was not in a correct format.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[FormatException: Input string was not in a correct format.]
   System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) +13709407
   System.Convert.ToDouble(String value) +62
   GICS.Controllers.HomeController.Estrai_coordinate(Object dato) in C:\Develope\XXXXX\GICS\GICS\Controllers\HomeController.cs:512
   GICS.Controllers.HomeController.Verificato(String livello, String submit, Object coordinata) in C:\Develope\XXXXX\GICS\GICS\Controllers\HomeController.cs:539
   lambda_method(Closure , ControllerBase , Object[] ) +202
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
   System.Web.Mvc.Async.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +67
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__11_0() +72
   System.Web.Mvc.Async.<>c__DisplayClass11_1.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +386
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__3() +42
   System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__5(IAsyncResult asyncResult) +186
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
   System.Web.Mvc.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +26
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
   System.Web.Mvc.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +41
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +65
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +399
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +137

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.1055.0


di seguito le parti di codice dove credo si generi il problema...

//Utente Verificato
        [HttpPost]
        public ActionResult Verificato(string livello, string submit, dynamic coordinata) //  object Sender, EventArgs e)
        {
            if (submit == "Confermo")
            {
                switch (livello)
                { 
                    case "Utente":

                        Estrai_coordinate(coordinata);

                        Registra(livello);
                        //trasmetti mail
                        //return View("Verificato");
                        return RedirectToAction("Index", "Utente");

                    case "Capo":

                        Estrai_coordinate(coordinata);

                        Registra(livello);

                        //Chiamata a procedura notifica amministrativa per abilitazione comandante
                        return View("Verificato");
                    default:
                        ViewData["Messaggio"] = "Selezionare uno dei ruoli";
                        return View("Verify");
                }
            }
            else if (submit == "Non Confermo")
                    {
                        return View("Support"); //da fare invio mail
                    }
             return View("Verify");

        }
    }
}




public void Estrai_coordinate(dynamic dato)
        {
            string[] strTemp1 = dato[0].Split(',');
            string indirizzo = null;
            string Latitudine = null;
            for (int i = 4; i <= strTemp1.Length - 1; i++)
            {
                if (i == (strTemp1.Length - 1))
                {
                    if (strTemp1[i].Contains(")"))
                    {
                        indirizzo += strTemp1[i].Substring(0, strTemp1[i].Length - 1);
                    }
                    else
                    {
                        indirizzo += strTemp1[i];
                    }
                }
                else
                {
                    indirizzo += strTemp1[i] + ", ";
                }
            }
            if (strTemp1[0].Contains("("))
            {
                 Latitudine = strTemp1[0].Substring(1, strTemp1[0].Length-1) + "," + strTemp1[1];
            }
            else
            {
                 Latitudine = strTemp1[0] + "," + strTemp1[1];

            }
            string Longitudine = strTemp1[2] + "," + strTemp1[3];
            Session["Latitudine"] = Convert.ToDouble(Latitudine);
            Session["Longitudine"] = Convert.ToDouble(Longitudine);
            Session["Address_mominatim"] = indirizzo;
        }


 public ActionResult Registra(string level)
        {
            using (GICSEntities1 db = new GICSEntities1())
            {
               
                string Ci = Session["Ci"].ToString();
                string G = Session["G"].ToString();
                string Cognome = Session["Surname"].ToString();
                string Nome = Session["Nome"].ToString();
                string Email = Session["Mail"].ToString();
                string Ufficio = Session["Ufficio"].ToString();
                string Indirizzo = Session["Indirizzo"].ToString();
                string Citta = Session["Citta"].ToString();
                string Provincia = Session["Provincia"].ToString();
                string Regione = Session["Regione"].ToString();
                //string Livello = Session["Livello"].ToString();
                string Uff_superiore = Session["Uff_Superiore"].ToString();
                string Address_nominatim = Session["Address_mominatim"].ToString();
                double Latitudine = Convert.ToDouble(Session["Latitudine"]);
                double Longitudine = Convert.ToDouble(Session["Longitudine"]);
                string Cap = Session["Cap"].ToString();
                string psw = Session["password"].ToString();// ricorda di cifrare poi



                //// inserisce i dati in DB Locale

                // Dati Tabella Reparto
                using (GICSEntities1 db2 = new GICSEntities1())
                    
                {
                    TbReparto nuovoReparto = db2.TbReparto.FirstOrDefault(m => m.Nome == Ufficio);
                    TbReparto AddnuovoReparto = db2.TbReparto.Create();

                    if (nuovoReparto == null)
                    {
                        MyGlobalVariables.RecordsCount = 0;
                        MyGlobalVariables.RecordsCount = db2.TbReparto.Count();
                        MyGlobalVariables.RecordsCount = MyGlobalVariables.RecordsCount + 1;
                        AddnuovoReparto.IdReparto = MyGlobalVariables.RecordsCount;
                        AddnuovoReparto.NomeReparto = Ufficio;
                        AddnuovoReparto.Strada = Address_nominatim;
                        AddnuovoReparto.Citta = Citta;
                        AddnuovoReparto.Cap = Cap;
                        AddnuovoReparto.Provincia = Provincia;
                        AddnuovoReparto.Lat = Latitudine;
                        AddnuovoReparto.Lon = Longitudine;

                        db2.TbReparto.Add(AddnuovoReparto);
                        db2.SaveChanges();
                    }
                    else
                    {
                        // Assegna alla variabile il valore dell'ID Reparto già presente
                        MyGlobalVariables.RecordsCount = nuovoReparto.IdReparto;


                    }
                }




                Tb nuovo = db.Tba.Create();


                
                nuovo.IdRepartoF = MyGlobalVariables.RecordsCount;
                nuovo.Ci = Ci;
                nuovo.G = G;
                nuovo.Cognome = Cognome;
                nuovo.Nome = Nome;
                nuovo.Email = Email;


                nuovo.Ufficio = Ufficio;
                nuovo.Indirizzo = Indirizzo;
                nuovo.Cap = Cap;
                nuovo.Citta = Citta;
                nuovo.Provincia = Provincia;

                nuovo.Ufficio_sup = Ufficio_superiore;
                nuovo.Regione = Regione;
                nuovo.Cap = Cap;

                if (level == "Utente")
                {
                    level = "Utente";
                }
                else
                    level = "Disable";

                Session["Livello"] = level;

                nuovo.Livello = level;
                nuovo.UserID = Guid.NewGuid();
                
                nuovo.Ip_registrazione=this.Request.ServerVariables["REMOTE_ADDR"];
                //DateTime myDateTime = DateTime.Now;
                nuovo.Data_registrazione = DateTime.Now;
                nuovo.Password = psw;
                db.Tba.Add(nuovo);
                db.SaveChanges();

                using (GICSEntities1 db1 = new GICSEntities1())
                {
                    TbCoordinateUtente nuoveCoordinate = db1.TbCoordinateUtenti.Create();
                    nuoveCoordinate.Ci = Ci;
                    nuoveCoordinate.nome = Address_nominatim;
                    nuoveCoordinate.Latitudine = Latitudine;
                    nuoveCoordinate.Longitudine = Longitudine;
                    db1.TbCoordinateUtenti.Add(nuoveCoordinate);
                    db1.SaveChanges();
                }
            }
            return View();// Inserire qui la pagina di inizio per gli utenti
        }

Modificato da shadow76 il 21 settembre 2019 09:43 -
65 messaggi dal 06 gennaio 2019
A qualcuno viene in mente qualcosa? Potrebbe essere un problema di IIS?
11.862 messaggi dal 09 febbraio 2002
Contributi
Probabilmente il problema è nelle impostazioni della lingua: in locale hai l'italiano e nel server hai l'inglese americano che si aspetta il punto come separatore dei decimali mentre tu invece stai digitando valori usando la virgola.

Prova ad impostare esplicitamente la Culture italiana nel web.config. Leggi qui come fare:
https://documentation.devexpress.com/AspNet/12062/Localization/How-to-Set-a-Culture-for-an-ASP-NET-Web-Page

ciao,
Moreno
Modificato da BrightSoul il 21 settembre 2019 20:45 -

Enjoy learning and just keep making
65 messaggi dal 06 gennaio 2019
Grazie mille Moreno.
Domani mattina provo e ti aggiorno.
Potresti segnalarmi come ti sei reso conto della problematica della lingua?
Io riguardo il web.config e non trovo alcun riferimento alla lingua.
Oppure è una supposizione che fai, proprio perché non vi è la stringa che imposta la lingua nel web.config?
Grazie mille.
Vincenzo
11.862 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Io riguardo il web.config e non trovo alcun riferimento alla lingua.

Forse è proprio questo il problema. Ce lo devi aggiungere. Dentro system.web metti:
<globalization uiCulture="it" culture="it" />



Potresti segnalarmi come ti sei reso conto della problematica della lingua?

A causa della FormatException. Ho presunto che tu stessi digitando i valori nello stesso esatto modo sia in locale che sul server. E se sul server hai problemi vuol dire che lì la logica di parsing è differente a causa di impostazioni della lingua diverse. Non mi vengono in mente altri motivi per il cui il parsing di quel double dovrebbe fallire.

Importante: se il double in questione è un prezzo, allora dovresti usare decimal che non è soggetto a problemi di arrotondamento.


Oppure è una supposizione che fai,

Sì, è solo una supposizione dato che non ho accesso all'intero progetto o al server.

ciao,
Moreno
Modificato da BrightSoul il 21 settembre 2019 21:57 -

Enjoy learning and just keep making
65 messaggi dal 06 gennaio 2019
Ciao Moreno, grazie mille per le tue risposte.
Ti confermo che ho aggiunto la stringa relativa alla lingua e ho risolto il problema.
Grazie mille!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.