2009-05-07 9 views
12

मैं समझता हूं कि वेब साइट प्रोजेक्ट्स ऑन-द-फ्लाई स्रोत को संकलित करते हैं, और वेब अनुप्रयोग प्रोजेक्ट्स डीएलएल में पूर्व-संकलित स्रोत (एएसपी.Net 1.x की तरह)।आईआईएस कैसे जानता है कि यह किसी वेब साइट या वेब एप्लिकेशन प्रोजेक्ट की सेवा कर रहा है या नहीं?

लेकिन आईआईएस में निर्दिष्ट अंतर कैसा है?

मुझे पता है कि दृश्य स्टूडियो जानता है - प्रत्येक, आदि के लिए विभिन्न परियोजनाओं लेकिन चल उदाहरण (आईआईएस + फ्रेमवर्क) , है पता करने के लिए जो संकलन मॉडल का इस्तेमाल किया जा रहा है वहीं कर रहे हैं? क्योंकि यह कैसे पता चलता है कि फ्लाई को संकलित करना है या नहीं?

एक अनुरोध आता है, एक एएसपीएक्स फ़ाइल हिट करता है ... और प्रक्रिया को कैसे पता चलता है कि संबंधित सीएस फ़ाइल को संकलित करने की आवश्यकता है (वेब ​​साइट), या यदि यह पहले से ही तैनाती (वेब ​​एप्लिकेशन) से पहले किया गया था?

मैं सिर्फ उत्सुक हूं जहां यह अंतर निर्दिष्ट है। Web.config कहीं कहीं?

+1

डैरन नृत्य करता है, तो आप को पता है सवाल –

उत्तर

21

.aspx फ़ाइल में एक सूक्ष्म अंतर है जो आपको इन प्रोजेक्ट प्रकारों में मिलेगा।

आप एक वेब साइट परियोजना आप कुछ इस तरह देखना चाहिए पर नज़र डालें तो ...

<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %> 

... वेब अनुप्रयोग परियोजना कुछ इस तरह के साथ .aspx फ़ाइलों होगा के रूप में जहां ...

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="Default.aspx.cs" Inherits="WebApplication2._Default" %> 

ध्यान दें कि पहले कोडफाइल विशेषता है, और दूसरा कोडबैंड विशेषता के रूप में है। यह वह जगह है जहां भेद किया जाता है।

कोडबहाइंड विशेषता रनटाइम पर उपयोग नहीं की जाती है - यह कोड VS.NET कहने के लिए है जहां कोड रहता है, और इनहेरिट्स विशेषता रनटाइम को बताती है कि कौन सा वर्ग बाइनरी में खोजना है।

कोडफाइल विशेषता रनटाइम पर उपयोग की जाती है, और कोड उत्पन्न करने के लिए aspnet_compiler.exe द्वारा उपयोग किया जाता है, और फिर इनहेरिट्स विशेषता उपरोक्त के रूप में उपयोग की जाती है।

इन विशेषताओं के बारे में अधिक जानकारी के लिए, यहाँ देखो ...

http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx

लेकिन आपके सवाल का जवाब देने के लिए "कैसे आईआईएस पता है?" जवाब है "यह नहीं करता है।" एएसपी.नेट जानता है।

आप साबित कर सकते हैं कि इस निम्न कार्य करके मामला है:

  1. एक नया वेब अनुप्रयोग बनाएँ। इसमें Default.aspx और Default.aspx.cs शामिल होंगे।
  2. Default.aspx.cs में निम्न कोड जोड़ें:

    protected void Page_Load(object sender, EventArgs e) 
    { 
        Response.Write("hello"); 
    } 
    
  3. परियोजना संकलित करें, इसे चलाने, पाठ "हैलो" एक ब्राउज़र में प्रकट होता देखें।

    protected void Page_Load(object sender, EventArgs e) 
    { 
        Response.Write("goodbye"); 
    } 
    
  4. संकलन नहीं है:

  5. अब, कोड .cs फ़ाइल को बदल तो यह इस तरह दिखता है, और सहेजें। अपने ब्राउज़र को रीफ्रेश करें। आपको अभी भी "हैलो" दिखाई देगा क्योंकि संकलित कोड अभी भी इस स्ट्रिंग का उपयोग करता है।

  6. अब, CodeBehind से CodeFile से Default.aspx में अट्रिब को बदलें। इस फाइल को सेव करें।

  7. अपने ब्राउज़र को रीफ्रेश करें। आप "अलविदा" प्रदर्शित करेंगे।

  8. "मुझे विश्वास है!" में आपके कोड में "अलविदा" बदलें। .aspx.cs को सहेजें लेकिन संकलित न करें।

  9. अपना ब्राउज़र ताज़ा, देखना "मुझे विश्वास है!", और कमरे में चारों ओर enlightend :-)

+0

मान लीजिए यह सटीक है, यह * बिल्कुल * है जो मैं ढूंढ रहा था। मुझे पता था * कहीं कुछ छोटी सेटिंग होनी चाहिए ... – Deane

+0

तो, इसे आज़माएं। एक वेब ऐप प्रोजेक्ट लें, कोडबैंड अट्रिब के बजाय कोडफाइल एट्रिब रखने के लिए .aspx फ़ाइल को बदलें, और देखें कि क्या आप लाइव साइट पर .cs संपादित कर सकते हैं और कोड को संकलित करने के लिए VS.NET का उपयोग किये बिना अंतर देख सकते हैं। मैंने अभी यह परीक्षण किया और यह सच साबित हुआ। –

+0

मैंने कुछ जवाब "इसे कैसे आज़माएं" चरणों के साथ अपना जवाब संपादित कर दिया है। –

-2

मुझे पूरा यकीन है कि ढांचा इसे संभालता है और यह आईआईएस के लिए पारदर्शी है।

+0

लेकिन यह कैसे ढांचे को पता है कि वोट चाहते हैं? कहीं, उत्पादन वेब सर्वर पर, कुछ सेटिंग या ध्वज होना चाहिए जो कहता है कि "इस ऑन-द-फ्लाई को संकलित करें" या "ऐसा न करें, क्योंकि यह उस डीएलएल में है।" – Deane

1

वेबसाइट या वेबप्लिकेशंस संकलित होने के बाद वेबसर्वर के लिए कोई अंतर नहीं है। आईआईएस में .NET हैंडलर हमेशा:

  1. एएसपीएक्स पृष्ठों को संकलित करें।
  2. अस्थायी फाइल क्षेत्र में निर्मित असेंबली को जिट करें।
  3. अनुरोध भागो

परिदृश्यों जहां साइट एक भी dll में पूरी तरह से संकलित किया गया है में वहाँ या तो अभी भी एक लाइन ASPX IIS में नेट संचालकों जहां कोड प्राप्त करने के लिए कह फ़ाइलें हैं। या एएसपीएक्स पृष्ठों को web.conig में कुछ अतिरिक्त कॉन्फ़िगरेशन लाइनों के साथ पूरी तरह से हटाया जा सकता है।

लेकिन संक्षिप्त उत्तर वास्तव में संकलित एक बार समान है।

+0

मुझे एहसास है कि वे समान हैं, लेकिन आईआईएस (या ढांचा - जो कुछ भी) जानता है कि वेब रूट में .cs फ़ाइलों को पहले से ही बिन में डीएलएल में संकलित किया गया है ... या नहीं? – Deane

+0

यह नहीं करता है। हैंडलर इसका ख्याल रखता है और यह हर बार इसका व्यवहार करता है। अगर पीछे कोड को एएसपीएक्स @ पेज निर्देश में निर्दिष्ट किया गया है तो हैंडलर को स्पष्ट रूप से पहले उस पर अनुपालन करने की आवश्यकता होगी। वीएस में यह मूल रूप से एक समेकित अंतर है, लेकिन आईआईएस में तैनात होने के बाद एस्पनेट_सापी फ़िल्टर दोनों को समान व्यवहार करता है। –

3

सभी आईआईएस उचित हैंडलर के आने वाले अनुरोध को पास कर रहा है। ASP.NET साइट/एप्लिकेशन के मामले में यह aspnet_isapi.dll है। हैंडलर तब से सब कुछ का ख्याल रखता है।

+0

आप IIS व्यवस्थापक में इस लिंक को देख/संपादित/मिटा सकते हैं: किसी वेबसाइट या वर्चुअल निर्देशिका के गुणों को खोलें, होम निर्देशिका टैब का चयन करें, कॉन्फ़िगरेशन बटन (नीचे दाएं), मैपिंग टैब पर क्लिक करें। –

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