2016-04-29 93 views
5

Stavo passando attraverso il debugger in qualche codice del database del sito Web e terminato l'esecuzione prima dell'applicazione delle modifiche al database. Ma erano ancora scritti nel database!UTILIZZO Il blocco si comporta in modo diverso nel modulo sito Web vs Windows

Ho provato a ricreare il problema utilizzando un'applicazione Windows Form e non ha scritto nel database (comportamento previsto). Sono tornato al sito web e lo ha effettuato.

Ecco una semplice pagina di esempio. Sto facendo funzionare questo in un web sito se fa la differenza:

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Diagnostics" %> 

<!DOCTYPE html> 

<script runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     using (MsSqlDataContextDataContext db = new MsSqlDataContextDataContext()) 
     { 
      Product product = db.Products.First(p => p.id == 21); 
      Debug.WriteLine("Line 1"); 
      // I learnt the hard way that if you try to update the database with the value 
      // that already exists, it seems to get optimised away. 
      // The update must a new value. 
      product.Type = "bogus" + DateTime.UtcNow.Ticks; 
      Debug.WriteLine("Line 2"); // <- Breakpoint here 
      db.SubmitChanges(); 
     } 
    } 
</script> 

<html> 
<head runat="server"> 
</head> 
</html> 

finisco esecuzione (Maiusc + F5) al punto di interruzione, prima la seconda stampa di debug o SubmitChanges() vengono eseguiti . "Linea 2" è non output nella finestra di debug, ma il database cambia è creato.

L'esecuzione dello stesso test in un Windows Form si comporta allo stesso modo.

Il ciclo di vita della pagina o la gestione della sessione interferiscono in qualche modo qui? Com'è possibile, la Linea 2 non viene stampata!

+0

Si sta verificando un errore/un'eccezione nel modulo di Windows, come funziona? – raidensan

+0

@raidensan Lo riformulerò. Non si comporta allo stesso modo. Non scrive la modifica al database (come mi aspettavo non dovrebbe, dato che ho abortito prima della chiamata 'Submit'). – Ian

+0

Esegui "throw new Exception()" invece di "Debug.WriteLine (" Line 2 ")" nell'esempio e vedi come va. – Evk

risposta

6

Quando si interrompe il debug nell'app Winform, il processo termina e il codice si arresta.

In asp.net questo non è il caso. Quando si interrompe il debugger (di solito) non si termina il processo di iis, basta staccare il debugger. Il codice continua a essere eseguito e la richiesta viene completata.

Ci sono duplicati per questa domanda, nessuna replica per contrassegnare questo come duplicato.

+0

Una buona spiegazione, ho fatto una ricerca ma non sapendo che la causa lo rende difficile. Vedrò se riesco a trovare un duplicato e segnalarlo da solo :) O collegarmi un duplicato e lo contrassegnerò. – Ian

+0

Non un duplicato esatto: [collegamento] (http://stackoverflow.com/questions/1338785/the-asp-net-code-still-executes-after-clicking-stopping-debugging-in-vs2008) (Spiega che è necessario per terminare il processo) – apr