2016-04-29 7 views
5

में अलग-अलग व्यवहार करता है, मैं कुछ वेबसाइट डेटाबेस कोड में डीबगर के माध्यम से कदम उठा रहा था, और डेटाबेस परिवर्तन लागू होने से पहले निष्पादन समाप्त हो गया था। लेकिन वे अभी भी डेटाबेस में लिखे गए थे!ब्लॉकिंग का उपयोग वेबसाइट बनाम विंडोज़ फॉर्म

मैंने विंडोज़ फॉर्म एप्लिकेशन का उपयोग करके समस्या को फिर से बनाने की कोशिश की, और यह डेटाबेस (अपेक्षित व्यवहार) को नहीं लिखा। मैं वेबसाइट पर वापस गया, और यह था।

यहां एक साधारण उदाहरण पृष्ठ है। मैं एक वेब साइट में यह चल रहा है अगर यह एक फर्क नहीं पड़ता:

<%@ 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> 

मैं अंत निष्पादन (शिफ्ट + F5) ब्रेकप्वाइंट पर, दूसरा डिबग प्रिंट या SubmitChanges() से पहले निष्पादित हो । "लाइन 2" डीबग विंडो में आउटपुट नहीं है, लेकिन डेटाबेस बनाया गया है।

विंडोज़ फॉर्म में एक ही परीक्षण चलाना वही व्यवहार करता है।

पृष्ठ जीवन चक्र या सत्र प्रबंधन किसी प्रकार से हस्तक्षेप कर रहा है? यह कैसे संभव है, लाइन 2 मुद्रित नहीं होता है!

+0

क्या आपको विंडोज़ फॉर्म पर त्रुटि/अपवाद मिल रहा है, यह कैसे काम नहीं करता है? – raidensan

+0

@raidensan मैं इसे दोबारा बताऊंगा। यह वही व्यवहार नहीं करता है। यह डेटाबेस में परिवर्तन नहीं लिखता है (जैसा कि मुझे उम्मीद है कि यह नहीं होना चाहिए, क्योंकि मैंने 'सबमिट' कॉल से पहले छोड़ा था)। – Ian

+0

"उदाहरण के लिए" Deugug.WriteLine ("रेखा 2") "के बजाय" नया अपवाद() "फेंक दें और देखें कि यह कैसा चल रहा है। – Evk

उत्तर

6

जब आप Winform ऐप में डिबगिंग रोकते हैं, तो प्रक्रिया समाप्त हो जाती है और आपका कोड निष्पादित हो जाता है।

asp.net में यह मामला नहीं है। जब आप डीबगर (आमतौर पर) को रोकते हैं तो यह आईआईएस प्रक्रिया को समाप्त नहीं करेगा, बस डीबगर को अलग करें। आपका कोड चल रहा है और अनुरोध पूरा हो गया है।

इस प्रश्न के लिए डुप्लिकेट हैं, तो इसे डुप्लिकेट के रूप में चिह्नित करने के लिए कोई प्रतिनिधि नहीं है।

+0

अच्छी व्याख्या, मैंने खोज की लेकिन कारण जानने से यह मुश्किल हो गया। मैं देखूंगा कि क्या मुझे एक डुप्ली मिल सकती है और इसे स्वयं ध्वजांकित कर सकता है :) या मुझे एक डुप्लिकेट करें और मैं इसे ध्वजांकित करूंगा। – Ian

+0

सटीक डुप्लिकेट नहीं: [लिंक] (http://stackoverflow.com/questions/1338785/the-asp-net-code-still-executes-after-clicking-stopping-debugging-in-vs2008) (आपको बताता है कि आपको आवश्यकता है प्रक्रिया को समाप्त करने के लिए) – apr

संबंधित मुद्दे