asp.net - सर्वर। ट्रांसफर बनाम। Response.Redirect




server.transfer (12)

Server.Transfer बीच क्या अंतर है। Server.Transfer और Response.Redirect ?

  • प्रत्येक के फायदे और नुकसान क्या हैं?
  • एक दूसरे पर कब उपयुक्त है?
  • कब उपयुक्त नहीं है?

  1. हाइपरलिंक और Response.Redirect की तरह, सर्वर। ट्रांसफर का उपयोग उसी वेब सर्वर पर चल रहे अन्य पृष्ठों / साइटों पर नेविगेट करने के लिए किया जाता है।
  2. सर्वर। ट्रांसफर का उपयोग किसी भिन्न वेब सर्वर पर साइटों / पृष्ठों पर नेविगेट करने के लिए नहीं किया जा सकता है।
  3. सर्वर। ट्रांसफर पता बार में यूआरएल नहीं बदलता है
  4. Server.Transfer Response.Redirect से तेज़ है क्योंकि एक अनुरोध / प्रतिक्रिया चक्र में सर्वर पर पुनर्निर्देशन होता है। Response.Redirect () में 2 अनुरोध / प्रतिक्रिया चक्र शामिल हैं।
  5. सर्वर के साथ। मूल अनुरोध से फॉर्म वैरिएबल को संरक्षित किया जाता है।

Response.Redirect अधिक महंगा है क्योंकि यह पता लगाने के लिए सर्वर पर एक अतिरिक्त यात्रा जोड़ता है कि कहां जाना है।

सर्वर। ट्रांसफर अधिक कुशल है हालांकि यह उपयोगकर्ता के लिए थोड़ा गलत हो सकता है क्योंकि यूआरएल शारीरिक रूप से परिवर्तित नहीं होता है।

मेरे अनुभव में, प्रदर्शन में अंतर बाद के दृष्टिकोण का उपयोग करने के लिए पर्याप्त महत्वपूर्ण नहीं रहा है


Response.Redirect में एक अतिरिक्त दौर यात्रा शामिल है और पता बार अपडेट करता है।

सर्वर। ट्रांसफर एड्रेस बार को बदलने का कारण नहीं बनता है, सर्वर किसी अन्य पेज से सामग्री के अनुरोध का जवाब देता है

जैसे

Response.Redirect: -

  1. क्लाइंट पर ब्राउज़र एक पृष्ठ http: //InitiallyRequestedPage.aspx का अनुरोध करता है
  2. सर्वर पर 302 के साथ अनुरोध को प्रतिसाद देता है कि रीडायरेक्ट पता http: //AnotherPage.aspx गुजर रहा है।
  3. क्लाइंट पर ब्राउज़र http: //AnotherPage.aspx पते पर दूसरा अनुरोध करता है।
  4. सर्वर पर http: //AnotherPage.aspx से सामग्री के साथ प्रतिक्रिया करता है

Server.Transfer: -

  1. क्लाइंट ब्राउज़र पर एक पृष्ठ http: //InitiallyRequestedPage.aspx का अनुरोध करता है
  2. सर्वर सर्वर पर। Http: //AnotherPage.aspx पर ट्रांसफर करें
  3. सर्वर पर http: //InitiallyRequestedPage.aspx http: //AnotherPage.aspx से वापस सामग्री को पास करने के अनुरोध के लिए प्रतिक्रिया की गई है

Response.Redirect

पेशेवर: - विश्वसनीय - यह पता बार बदलता है, पते का उपयोग अनुरोध के बीच राज्य के परिवर्तनों को रिकॉर्ड करने के लिए किया जा सकता है।

विपक्ष: - धीमा - क्लाइंट और सर्वर के बीच एक अतिरिक्त राउंड-ट्रिप है। क्लाइंट और सर्वर के बीच पर्याप्त विलंब होने पर यह महंगा हो सकता है।

Server.Transfer

पेशेवर: - त्वरित।

विपक्ष: - राज्य खो गया - यदि आप सर्वर का उपयोग कर रहे हैं। पोस्ट बैक के जवाब में एप्लिकेशन की स्थिति बदलने के लिए ट्रांसफर करें, यदि पृष्ठ को फिर से लोड किया जाता है तो वह राज्य खो जाएगा, क्योंकि पता बार वही होगा जैसा पता था पहले अनुरोध पर।


ऊपर निर्दिष्ट के रूप में कई मतभेद हैं। सब से ऊपर, एक और अंतर है। Response.redirect () को उपयोगकर्ता को किसी भी पृष्ठ पर रीडायरेक्ट करने के लिए उपयोग किया जा सकता है जो एप्लिकेशन का हिस्सा नहीं है लेकिन server.transfer () का उपयोग केवल उपयोगकर्ता के भीतर एप्लिकेशन को रीडायरेक्ट करने के लिए किया जा सकता है।

Response.Redirect(''http://www.google.com");
//This will work.

Server.Transfer(''http://www.google.com");
//This will not work.

सर्वर की सुंदरता। ट्रांसफर यह है कि आप इसके साथ क्या कर सकते हैं:

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

जब तक आप सर्वर का उपयोग करते हैं, तब तक आप उपर्युक्त विधि का उपयोग करके अपने पिछले पृष्ठ से कुछ भी प्राप्त कर सकते हैं। ट्रांसफर लेकिन प्रतिक्रिया नहीं। रेडियोधर्मी


सर्वर। ट्रांसफर क्लाइंट ब्राउज़र में यूआरएल नहीं बदलता है, इसलिए ब्राउज़र को पता नहीं है कि आप किसी अन्य सर्वर-साइड हैंडलर में बदल गए हैं। Response.Redirect ब्राउज़र को एक अलग पृष्ठ पर जाने के लिए कहता है, इसलिए टाइटलबार में यूआरएल बदल जाता है।

सर्वर। ट्रांसफर थोड़ा तेज़ है क्योंकि यह सर्वर पर एक राउंडट्रिप से बचाता है, लेकिन आप जो भी करने की कोशिश कर रहे हैं उसके आधार पर यूआरएल का गैर-परिवर्तन आपके लिए अच्छा या बुरा हो सकता है।


स्थानांतरण () के बारे में बस अधिक जानकारी, यह वास्तव में सर्वर है। निष्पादन () + Response.End (), इसका स्रोत कोड नीचे है (मोनो / .NET 4.0 से):

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

और निष्पादन के लिए (), यह चलाने के लिए क्या है, दिए गए पथ के हैंडलर , देखें

एएसपी.नेट यह सत्यापित नहीं करता है कि वर्तमान उपयोगकर्ता निष्पादन विधि द्वारा प्रदत्त संसाधन को देखने के लिए अधिकृत है। हालांकि एएसपी.NET प्रमाणीकरण और प्रमाणीकरण तर्क मूल संसाधन हैंडलर कहने से पहले चलता है, एएसपी.NET सीधे निष्पादन विधि द्वारा इंगित हैंडलर को कॉल करता है और नए संसाधन के लिए प्रमाणीकरण और प्रमाणीकरण तर्क को पुन: चालू नहीं करता है। यदि आपके एप्लिकेशन की सुरक्षा नीति के लिए ग्राहकों को संसाधन तक पहुंचने के लिए उचित प्राधिकरण होना आवश्यक है, तो एप्लिकेशन को पुनः प्राधिकरण को मजबूर होना चाहिए या कस्टम एक्सेस-कंट्रोल तंत्र प्रदान करना चाहिए।

आप निष्पादन विधि के बजाय रीडायरेक्ट विधि का उपयोग करके पुनः प्राधिकरण को मजबूर कर सकते हैं। रीडायरेक्ट क्लाइंट-साइड रीडायरेक्ट करता है जिसमें ब्राउज़र नए संसाधन का अनुरोध करता है। चूंकि यह रीडायरेक्ट सिस्टम में प्रवेश करने का एक नया अनुरोध है, इसलिए यह इंटरनेट सूचना सेवा (आईआईएस) और एएसपी.नेट सुरक्षा नीति दोनों के सभी प्रमाणीकरण और प्रमाणीकरण तर्क के अधीन है।

- एमएसडीएन से


स्थानांतरण पूरी तरह सर्वर-साइड है। ग्राहक पता बार स्थिर रहता है। अनुरोधों के बीच संदर्भ के हस्तांतरण के बारे में कुछ जटिलता। पेज हैंडलर को फ्लश करना और पुनरारंभ करना महंगा हो सकता है, इसलिए शुरुआती शुरुआत में पाइपलाइन में अपना स्थानांतरण करें जैसे कि BeginRequest के दौरान एक HttpModule में। एमएसडीएन दस्तावेज़ों को ध्यान से पढ़ें, और HttpContext.Request के नए मानों का परीक्षण और समझें - खासकर पोस्टबैक परिदृश्य में। हम आम तौर पर सर्वर का उपयोग करते हैं। त्रुटि परिदृश्यों के लिए ट्रांसफर।

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


Response.Redirect() का उपयोग तब किया जाना चाहिए जब:

  • हम अनुरोध को हमारे सर्वर पर या किसी अन्य वेब सर्वर पर कुछ सादे HTML पृष्ठों पर रीडायरेक्ट करना चाहते हैं
  • हम प्रत्येक अनुरोध पर सर्वर के लिए अतिरिक्त roundtrips पैदा करने की परवाह नहीं करते हैं
  • हमें मूल अनुरोध से क्वेरी स्ट्रिंग और फॉर्म वैरिएबल को संरक्षित करने की आवश्यकता नहीं है
  • हम चाहते हैं कि हमारे उपयोगकर्ता नए रीडायरेक्ट किए गए यूआरएल को देख सकें जहां उन्हें अपने ब्राउज़र में रीडायरेक्ट किया गया हो (और यदि आवश्यक हो तो इसे बुकमार्क करने में सक्षम हो)

Server.Transfer() का उपयोग तब किया जाना चाहिए जब:

  • हम वर्तमान पृष्ठ अनुरोध को उसी सर्वर पर किसी अन्य .aspx पृष्ठ पर स्थानांतरित करना चाहते हैं
  • हम सर्वर संसाधनों को संरक्षित करना चाहते हैं और सर्वर पर अनावश्यक राउंडट्रिप्स से बचें
  • हम क्वेरी स्ट्रिंग और फॉर्म वैरिएबल को सुरक्षित रखना चाहते हैं (वैकल्पिक रूप से)
  • हमें वास्तविक यूआरएल दिखाने की ज़रूरत नहीं है जहां हमने उपयोगकर्ताओं को वेब ब्राउजर में अनुरोध को रीडायरेक्ट किया था

Response.Redirect बस ब्राउज़र पर एक संदेश (HTTP 302) भेजता है।

Server.Transfer । ब्राउज़र को कुछ भी जानने के बिना होता है, ब्राउज़र एक पृष्ठ का अनुरोध करता है, लेकिन सर्वर दूसरे की सामग्री देता है।


Response.Redirect Response.Redirect () आपको एक नए पृष्ठ पर भेज देगा, पता बार अपडेट करें और इसे ब्राउज़र इतिहास में जोड़ें। अपने ब्राउज़र पर आप वापस क्लिक कर सकते हैं। यह हमारे सर्वर या किसी अन्य वेब सर्वर पर कुछ सादे HTML पृष्ठों के अनुरोध को पुनर्निर्देशित करता है। यह प्रत्येक अनुरोध पर सर्वर के लिए अतिरिक्त roundtrips का कारण बनता है। यह मूल अनुरोध से क्वेरी स्ट्रिंग और फॉर्म वैरिएबल को सुरक्षित नहीं करता है। यह नया रीडायरेक्ट यूआरएल देखने में सक्षम बनाता है जहां इसे ब्राउज़र में रीडायरेक्ट किया जाता है (और यदि आवश्यक हो तो इसे बुकमार्क करने में सक्षम हो)। प्रतिक्रिया। रीडायरेक्ट बस एक संदेश नीचे भेजता है (HTTP 302) ब्राउज़र।

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


सर्वर। ट्रांसफर (): क्लाइंट दिखाया गया है क्योंकि यह केवल अनुरोध पृष्ठ पर है, लेकिन सभी सामग्री अनुरोधित पृष्ठ का है। Context.Item संग्रह का उपयोग कर पृष्ठों पर डेटा जारी रह सकता है, जो पृष्ठ को जीवित रखते हुए एक पृष्ठ से डेटा को स्थानांतरित करने का सबसे अच्छा तरीका है।

Response.Redirect (): क्लाइंट भौतिक स्थान (पृष्ठ का नाम और क्वेरी स्ट्रिंग भी) जानता है। संदर्भ पृष्ठ पर गंतव्य पर नेविगेट करते समय यह दृढ़ता खो देता है। आईआईएस के पुराने संस्करणों में, यदि हम किसी उपयोगकर्ता को एक नए वेब पेज पर भेजना चाहते थे, तो हमारे पास एकमात्र विकल्प था Response.Redirect। हालांकि यह विधि हमारे लक्ष्य को पूरा करती है, लेकिन इसमें कई महत्वपूर्ण कमीएं हैं। सबसे बड़ी समस्या यह है कि यह विधि प्रत्येक पृष्ठ को एक अलग लेनदेन के रूप में माना जाता है। अपनी लेनदेन की अखंडता को बनाए रखना मुश्किल बनाने के अलावा, Response.Redirect कुछ अतिरिक्त सिरदर्द पेश करता है। सबसे पहले, यह कोड के अच्छे encapsulation रोकता है। दूसरा, आप अनुरोध ऑब्जेक्ट में सभी गुणों तक पहुंच खो देते हैं। निश्चित रूप से, कामकाज हैं, लेकिन वे मुश्किल हैं। अंत में, Response.Redirect क्लाइंट के लिए एक राउंड ट्रिप की आवश्यकता है, जो, उच्च-मात्रा वाली साइटों पर, स्केलेबिलिटी समस्याओं का कारण बनता है।





server.transfer