Vedere il debug di una web app pubblicata

di il
7 risposte

Vedere il debug di una web app pubblicata

Salve a tutti finalmente ho messo in produzione una piccola web app, però mi sono accorto di un problema o meglio di un paio di problemi che in locale non si verificavano ed invece dopo averlo pubblicato mi sorgono.

Pertanto, prima di chiedere il Vs. Aiuto per capire come risolvere i problemi,
vorrei sapere se è possibile vedere il debug in una web app pubblicata.
se può essere d' aiuto uso register per pubblicare l' app.

Grazie

7 Risposte

  • Re: Vedere il debug di una web app pubblicata

    eternityck ha scritto:


    Pertanto, prima di chiedere il Vs. Aiuto per capire come risolvere i problemi,
    vorrei sapere se è possibile vedere il debug in una web app pubblicata.
    Dovresti pubblicare l'applicazione con il profilo di "Debug" al posto delle "Release", o in alternativa includendo i file .pdb con le informazioni sui simboli (per aiutare il framework a risalire alle informazioni relative al codice sorgente partendo dai compilati).

    Inoltre, lato configurazione (es. file Web.config) dovresti abilitare qualsiasi flag di debugging.

    L'alternativa migliore sarebbe prevedere un gestore di eccezioni condiviso che riporti sulla pagina un errore generico all'utente, ma che sia in grado di reperire e inviare (via mail o altro mezzo) un dettaglio dell'errore riscontrato, oppure che vada a fare un log in un apposito file che possa essere successivamente consultato da un amministratore di sistema.

    Ciao!
  • Re: Vedere il debug di una web app pubblicata

    L' ho pubblicato in debug ma il problema è che non mi dà nessun errore, semplicemente l' app non esegue il codice che scritto quando è pubblicato ed invece in localhost lo esegue e non capisco il perchè
  • Re: Vedere il debug di una web app pubblicata

    Prova a cercare nel progetto "localhost" oppure 127.0.0.1
  • Re: Vedere il debug di una web app pubblicata

    Non ho capito, il mio problema stà nel fatto che in local host funziona, ma una volta pubblicato non funziona, è vorrei capire come vedere dove dà errore quando é pubblicato
  • Re: Vedere il debug di una web app pubblicata

    eternityck ha scritto:


    Non ho capito, il mio problema stà nel fatto che in local host funziona, ma una volta pubblicato non funziona, è vorrei capire come vedere dove dà errore quando é pubblicato
    "Non funziona" cosa vuol dire? Non siamo utenti finali, siamo tecnici, quindi non esiste il "non funziona": qualcosa dovrà pur accadere, che possa avere o meno un senso lo stabiliamo in seguito.
  • Re: Vedere il debug di una web app pubblicata

    Allora Marco intanto grazie per l' aiuto che potrai darmi.
    ho 2 errori che non riesco a capire il perchè in locale, sia usando la console che IIS express funzionano invece dopo averlo pubblicato non funziona più intanto pongo il primo:

    in una lista di dipendenti ho la maschera in pop up modal per fare le modifiche la view della maschera principale è :
    
    @model PaginatedList<Cedolini.Models.Utente>
    
    @{
        ViewBag.Title = "Gestione Utenti";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    
        <h2 style="text-align:center"> <strong>Elecno Utenti</strong></h2>
        <form asp-action="GestioneUtenti" method="get">
            <div class="form-actions no-color">
                <p>
                    Cerca: <input type="text" name="SearchString" value="@ViewData["CurrentFilter"]" />
                    <a class="btn btn-primary btn-small" asp-action="GestioneUtenti">Annulla Ricerca</a>
                </p>
            </div>
        </form>
    
        <table class="table">
            <thead>
                <tr>
                    <th>
                        <a asp-action="GestioneUtenti" asp-route-sortOrder="@ViewData["CognomeSortParm"]" asp-route-currentFilter="@ViewData["CurrentFilter"]">Cognome</a>
                    </th>
                    <th>
                        Nome
                    </th>
                    <th>
                        Codice Fiscale
                    </th>
                    <th>
                        Password
                    </th>
    
                    @{if (Context.User.IsInRole("1"))
                        {
                            <th>
                                <a onclick="showInPopup('@Url.Action("UtenteModifica", "Admin",new { Id = 0 }, Context.Request.Scheme)','Crea Nuovo Utente')"
                                class="btn btn-success text-white"><i class="fa fa-user fa-fw"></i>Crea Nuovo Utente</a>
                            </th>
                        }
                    }
                    <th></th>
                </tr>
            </thead>
    
            <tbody>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Cognome)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Nome)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.CodiceFiscale)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Password)
                        </td>
    
                        <td>
                            <a class="btn btn-primary" asp-controller="Publi" asp-action="DocumentiDipendenti" asp-route-id="@item.Id">Visualizza Cedolini</a>
                             <a onclick="showInPopup('@Url.Action("UtenteModifica", "Admin", new { id = item.Id }, Context.Request.Scheme)')"
                            class="btn btn-info text-white"><i class="fas fa-pencil-alt"></i> Modifica</a>
                          
                            @{if (Context.User.IsInRole("1"))
                                {
                                    <form asp-action="DeleteUtente" asp-route-id="@item.Id" onsubmit="return jQueryAjaxDelete(this)" class="d-inline">
                                        <input type="hidden" asp-for="@item.Id" /> <input type="submit" value="Elimina" class="btn btn-danger" />
                                    </form>
                                }
                            }
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    @{
        var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";
        var nextDisabled = !Model.HasNextPage ? "disabled" : "";
    }
        
    <a asp-action="GestioneUtenti" asp-route-sortOrder="@ViewData["CurrentSort"]" asp-route-pageNumber="@(Model.PageIndex - 1)" asp-route-currentFilter="@ViewData["CurrentFilter"]"
    class="btn btn-primary @prevDisabled">
    Precedente
    </a>
    <a asp-action="GestioneUtenti"
    asp-route-sortOrder="@ViewData["CurrentSort"]" asp-route-pageNumber="@(Model.PageIndex + 1)" asp-route-currentFilter="@ViewData["CurrentFilter"]"
    class="btn btn-primary @nextDisabled">
    Successivo
    </a>
    
    ed il controller è
    
            [Authorize(Roles = "1,2")]
            [HttpGet]
            public async Task<IActionResult> GestioneUtenti(string searchString, string sortOrder, string currentFilter, int? pageNumber)
            {
                string SNome = HttpContext.Session.GetString("NomeCliente");
                ViewData["NomeCliente"] = SNome;
                ViewData["CurrentSort"] = sortOrder;
                ViewData["CognomeSortParm"] = String.IsNullOrEmpty(sortOrder) ? "Cognome_desc" : "";
                ViewData["CodiceSortParm"] = sortOrder == "Codice" ? "Codice_desc" : "Codice";
    
                if (searchString != null)
                {
                    pageNumber = 1;
                }
                else
                {
                    searchString = currentFilter;
                }
                ViewData["CurrentFilter"] = searchString;
    
                var UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti Where NomeUtente <>'admin'").AsNoTracking().ToListAsync();
                //CONTROLLO SE LA RICERCA è VUOTA
                if (!String.IsNullOrEmpty(searchString))
                {
                    //Controllo se nella ricerca ci sono apostrofo e le raddoppio
                    searchString = searchString.Replace("'", "''");
    
                    //Controllo se la Ricerca è Numerica o AlfaNumerica
                    long number1 = 0;
                    bool canConvert = long.TryParse(searchString, out number1);
                    //Se la Ricerca è Numerica cerco la Matricola
                    if (canConvert == true)
                        if (HttpContext.Session.GetString("Ruolo") == "1")
                        {
                            switch (sortOrder)
                            {
                                case "Cognome_desc":
                                    UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti Where NomeUtente <>'admin'").AsNoTracking().ToListAsync();
                                    break;
    
                                default:
                                    UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti Where NomeUtente <>'admin'").AsNoTracking().ToListAsync();
                                    break;
                            }
                        }
                    //Se la Ricerca è AlfaNumerica Cerco Sul Cognome o Codice Fiscale
                    else
                                switch (sortOrder)
                        {
                            case "Cognome_desc":
                                UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti WHERE Cognome LIKE '" + searchString + "%' OR CodiceFiscale LIKE '" + searchString + "%' " +
                                    "AND NomeUtente <>'admin' ORDER BY Cognome DESC").AsNoTracking().ToListAsync();
                                break;
                            default:
                                UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti  WHERE Cognome LIKE '" + searchString + "%' OR CodiceFiscale LIKE '" + searchString + "%' " +
                                    "AND NomeUtente <>'admin' ORDER BY Cognome, Nome").AsNoTracking().ToListAsync();
                                break;
                        }
                }
                //se NON c'è Nessuna Ricerca
                else
                    if (HttpContext.Session.GetString("Ruolo") == "1")
                        switch (sortOrder)
                        {
                            case "Cognome_desc":
                                UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti Where NomeUtente <>'admin' ORDER BY Cognome DESC").AsNoTracking().ToListAsync(); ;
                                break;
                            default:
                                UtenteElenco = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti Where NomeUtente <>'admin' ORDER BY Cognome, Nome").AsNoTracking().ToListAsync();
                                break;
                        }
    
                //Definisco il NUmero di Record per Pagina
                int pageSize = 8;
                return View(await PaginatedList<Utente>.CreateAsync(UtenteElenco, pageNumber ?? 1, pageSize));
            }
    
    fin qui tutto ok clicco su modifica e si apre il pop up
                             <a onclick="showInPopup('@Url.Action("UtenteModifica", "Admin", new { id = item.Id }, Context.Request.Scheme)')"
                            class="btn btn-info text-white"><i class="fas fa-pencil-alt"></i> Modifica</a>
    
    che ha questa view
    
    @model Cedolini.Models.Utente
    
    @{
        ViewBag.Title = "Modifica Utente";
        Layout = null;
    }
    <div class="row">
        <div class="col-md-12">
            <form asp-action="UtenteModifica" asp-route-id="@Model.Id" onsubmit="return jQueryAjaxPost(this);">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <input type="hidden" asp-for="Id" />
                @*  <input type="hidden" asp-for="Date" />*@
    
                <div class="tab-content">
    
                    <div class="tab-pane active" id="tab1">
                        <div class="form-group">
                            <label class="control-label">Codice Fiscale e Nome Utente</label>
                            <input asp-for="CodiceFiscale" class="form-control" />
                            <span asp-validation-for="CodiceFiscale" class="text-danger"></span>
                        </div>
                    
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <label asp-for="Cognome" class="control-label"></label>
                                        <input asp-for="Cognome" class="form-control" />
                                        <span asp-validation-for="Cognome" class="text-danger"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <label asp-for="Nome" class="control-label"></label>
                                        <input asp-for="Nome" class="form-control" />
                                        <span asp-validation-for="Nome" class="text-danger"></span>
                                    </div>
                                </div>
                            </div>
    
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <label asp-for="DataNascita" class="control-label"></label>
                                        <div class="input-group">
                                            <div class="input-group-prepend">
                                            </div>
                                            <input asp-for="DataNascita" class="form-control" />
                                        </div>
                                        <span asp-validation-for="DataNascita" class="text-danger"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <label asp-for="ComuneNascita" class="control-label"></label>
                                        <input asp-for="ComuneNascita" class="form-control" />
                                        <span asp-validation-for="ComuneNascita" class="text-danger"></span>
                                    </div>
                                </div>
                            </div>
    
                            <div class="row">
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <label asp-for="Ruolo" class="control-label"></label>
                                        <select id="comboboxRuolo" runat="server">
                                            <option value="1">Amministratore</option>
                                            <option value="2">Supervisore</option>
                                            <option value="3">Dipndente</option>
                                        </select>
                                        <input asp-for="Ruolo" class="form-control" />
                                        <span asp-validation-for="Ruolo" class="text-danger"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <label asp-for="CodiceCliente" class="control-label"></label>
                                    <select id="comboboxCliente" runat="server">
                                        <option value="51">Azienda Caltanissetta</option>
                                        <option value="52">Irf Caltanissetta</option>
                                        <option value="53">Irf Agrigento</option>
                                        <option value="54">Azienda Agrigento</option>
                                        <option value="55">Irf Palermo</option>
                                        <option value="56">Azienda Palermo</option>
                                        <option value="57">Azienda Enna</option>
                                        <option value="58">Irf Enna</option>
                                        <option value="59">Irf Trapani</option>
                                    </select>
    
                                    <div class="form-group">
                                        <label asp-for="CodiceCliente" class="control-label"></label>
                                        <input asp-for="CodiceCliente" class="form-control" />
                                        <span asp-validation-for="CodiceCliente" class="text-danger"></span>
                                    </div>
                                </div>
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <label asp-for="Password" class="control-label"></label>
                                        <input asp-for="Password" class="form-control" />
                                        <span asp-validation-for="Password" class="text-danger"></span>
                                    </div>
                                </div>
    
                            </div>
    
                        </div>
                </div>
                <div class="form-group">
                    <div class="col-md-6 offset-md-3";">
                        <input type="submit" value="Modifica" OnClick="btnRefresh_Click" class="btn btn-primary btn-block" OnClientClick="hourglass(); return true;" />
                    </div>
                </div>
            </form>
        </div>
    </div>
    
    e questo controller
    
            //UPDATE Dipendenti
            [Authorize(Roles = "1,2")]
            [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<IActionResult> UtenteModifica(int Id, Utente Utenti)
            {
                if (ModelState.IsValid)
                {
                    System.Diagnostics.Debug.WriteLine("id utente " +Id);
    
                    //Update(Se devo aggiornare i dati del dipendente)
                    if (Id != 0)
                    {
                        try//Aggiorno i Dati
                        {
                            await _context.Database.ExecuteSqlRawAsync("UPDATE Utenti SET NomeUtente = N'" + Utenti.CodiceFiscale + "', Cognome =N'" + Utenti.Cognome + "', " +
                            "Nome ='" + Utenti.Nome + "', DataNascita ='" + Utenti.DataNascita + "', ComuneNascita ='" + Utenti.ComuneNascita + "', " +
                            "CodiceFiscale = '" + Utenti.CodiceFiscale + "', Ruolo = " + Utenti.Ruolo + ", CodiceCliente = " + Utenti.CodiceCliente + ", Password ='" + Utenti.Password + "' " +
                            "WHERE(ID = " + Id + ")");
                        }
                        catch (DbUpdateConcurrencyException)
                        {
                           if (!UtenteExists(Utenti.Id))
                               { return NotFound(); }
                           else
                               { throw; }
                       }
                    }
                    else
                    //Insert(Se ho premuto crea Nuovo dipendente)
    
                    {
                        //Se Sono Presenti delle Apostrofi le Modifico
                        var Cognome = Utenti.Cognome.Replace("'", "''");
                        var Nome = Utenti.Nome.Replace("'", "''");
                        var ComuneNascita = Utenti.ComuneNascita.Replace("'", "''");
    
                        await _context.Database.ExecuteSqlRawAsync("INSERT INTO Utenti (NomeUtente,Password,Ruolo,Cognome,Nome,CodiceFiscale,DataNascita,ComuneNascita,CodiceCliente) " +
                            "SELECT N'" + Utenti.CodiceFiscale + "', N'" + Utenti.Password + "', " + Utenti.Ruolo + ",   N'" + Cognome + "', N'" + Nome + "', N'" + Utenti.CodiceFiscale + "', " +
                            " '" + Utenti.DataNascita + "', N'" + Utenti.ComuneNascita + "',"+Utenti.CodiceCliente+";");
                    }
    
                    //Seleziono i dati per la Maschera Dipendenti
                    var UtentiAgg = await _context.Utenti.FromSqlRaw("SELECT * FROM Utenti Where NomeUtente <> 'admin'").AsNoTracking().ToListAsync();
    
                    return Json(new { isValid = true, html = Helper.RenderRazorViewToString(this, "GestioneUtenti", UtentiAgg) });
                }
                return Json(new { isValid = false, html = Helper.RenderRazorViewToString(this, "UtenteModifica", Utenti) });
            }
    
    ora il problema stà nel fatto che in locale funziona perfettamente ma dopo averlo pubblicato, dopo aver fatto una modifica a caso e premuto il pulsante modifica, non succede niente rimane aperto il pop up e non aggiorna le modifiche
  • Re: Vedere il debug di una web app pubblicata

    eternityck ha scritto:


    [...]
    ora il problema stà nel fatto che in locale funziona perfettamente ma dopo averlo pubblicato, dopo aver fatto una modifica a caso e premuto il pulsante modifica, non succede niente rimane aperto il pop up e non aggiorna le modifiche
    Prova ad aprire i Developer Tools con il tasto F12 e a visualizzare la scheda Console per controllare l'assenza di errori nel momento in cui effettui le operazioni che hai descritto.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
7 risposte