2011-11-22 16 views
11

पर सीडीएन स्क्रिप्ट्स की सेवा के लिए स्क्रिप्ट मैनेजर को कैसे मजबूर करूं? हमारे पास एक वेब फार्म पर एक साइट परोसा गया है। खेत एक एसएसएल एक्सेलेरेटर के पीछे है जो एन्क्रिप्शन को संभालता है। इसका मतलब है कि हमारे आईआईएस सर्वर सभी आने वाले कनेक्शन http के रूप में देखते हैं, भले ही उपयोगकर्ता सभी https से https से कनेक्ट हों।मैं एसएसएल

हम ScriptManager की EnableCDN = सच संपत्ति का उपयोग करने लगे हैं। हमारे देव वातावरण पर जहां कोई एसएसएल एक्सेलेरेटर नहीं है, सीडीएन पर जेएस फाइलों के संदर्भों को https के साथ प्रस्तुत किया जाता है, उत्पादन वातावरण पर उन्हें असुरक्षित रूप से http पर प्रदान किया जाता है जो जेएस को अवरुद्ध कर देता है "केवल सुरक्षित सामग्री प्रदर्शित होती है "त्रुटियां।

स्क्रिप्टमैनगर में सभी स्क्रिप्ट संदर्भ मैन्युअल रूप से अद्यतन करने या मॉड्यूल के माध्यम से बाहर निकलने पर HTML को फिर से लिखने का छोटा, क्या किसी को स्क्रिप्टमैनर को https के माध्यम से इसके संदर्भ प्रस्तुत करने के लिए मजबूर करने का तरीका पता है?

संपादित करें:

कुछ परावर्तक समीक्षा करने के बाद, मैं नहीं मानता कि यह संभव है। मैंने निम्नलिखित हैक को जगह में रखा है, हालांकि यह स्पष्ट रूप से नाजुक है क्योंकि इसमें एक निजी क्षेत्र तक पहुंच शामिल है। अगर कोई बेहतर तरीके से देख सकता है तो मुझे यह सुनना अच्छा लगेगा।

var secureConnectionField = ScriptManager.GetType().GetField("_isSecureConnection", BindingFlags.Instance | BindingFlags.NonPublic); 
if (secureConnectionField != null) 
    secureConnectionField.SetValue(ScriptManager, true); 
+2

मैं मामले आपके द्वारा बताई गई के लिए यह कोशिश की है नहीं, लेकिन HTML/जे एस में कुछ स्थानों पर जहां प्रोटोकॉल छोड़ सकते हैं देखते हैं, और ब्राउज़र एक ही प्रोटोकॉल के रूप में प्रयोग यूआरएल का अनुरोध करेंगे युक्त पेज के लिए। उदाहरण के लिए, "//cdn.mydomain.com/myfile.js" – RickNZ

+0

टिप के लिए धन्यवाद, लेकिन इस मामले में मैं प्रदान किए गए यूआरएल को नियंत्रित नहीं करता - यह फ्रेमवर्क डीएलएस में पंजीकृत है। मुझे विश्वास नहीं है कि सीडीएन संदर्भों को प्रस्तुत करते समय प्रोटोकॉल को छोड़ने के लिए स्क्रिप्ट प्रबंधक को बताने के लिए एक दूर है। –

+0

स्क्रिप्ट मैनेजर एक नियंत्रण है, इसलिए आपको या तो एक नियंत्रण एडाप्टर बनाने में सक्षम होना चाहिए जो पथ निर्माण तर्क को ओवरराइड करेगा, या शायद मूल से विरासत में प्राप्त एक नया नियंत्रण बनाएं, और टैग मैपिंग का उपयोग अपने ऐप में गतिशील रूप से प्रतिस्थापित करने के लिए करें। – RickNZ

उत्तर

0

आम तौर पर आपके विकास और उत्पादन सर्वरों में अलग-अलग आईपी श्रेणियां होंगी। विकास दल से ढांचे में आईपी पते के आधार पर "प्रोटोकॉल स्विच" लागू करने के लिए कहें।

+0

विचार के लिए धन्यवाद, लेकिन यह वास्तव में हमारे लिए काम नहीं करता है, क्योंकि वेब सर्वर अभी भी डिज़ाइन द्वारा http में पृष्ठों को देखते हैं। हम आईआईएस के एन्क्रिप्शन लोड को स्थानांतरित करने के लिए एसएसएल त्वरक का उपयोग करते हैं। स्क्रिप्टमैनगर देख रहा है कि आईआईएस क्या कर रहा है। –

1

आप ASP.NET 4.0 या उच्चतर तो समाधान में से एक ScriptManager नियंत्रण से ScriptResourceMapping सुविधा का उपयोग करने के लिए है का उपयोग करते हैं।

वैश्विक asax में उदाहरण के लिए आप निम्नलिखित कोड जोड़ सकते हैं:

void Application_Start(object sender, EventArgs e) { 

// map a simple name to a path 

ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition { 

    Path = "~/scripts/jquery-1.3.2.min.js", 

    DebugPath = "~/scripts/jquery-1.3.2.js", 

    CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js", 

    CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.js" 

}); 

} 

तो, जैसा कि आप देख सकते हैं कि आप CDN पथ स्पष्ट रूप से सेट कर सकते हैं। साथ ही, आप मानक अजाक्स फ़ाइलों के लिए स्क्रिप्ट मैपिंग को ओवरराइड कर सकते हैं।

अधिक जानकारी इस लेख में पाया जा सकता है: http://weblogs.asp.net/infinitiesloop/archive/2009/11/23/asp-net-4-0-scriptmanager-improvements.aspx

-1

इस Global.asax

void Application_Start(object sender, EventArgs e) { 

// map a simple name to a path 

ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition { 

    Path = "~/scripts/jquery-1.3.2.min.js", 

    DebugPath = "~/scripts/jquery-1.3.2.js", 

    CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.min.js", 

    CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.3.2.js" 

}); 

} 
+0

आपको प्रत्येक डीएल द्वारा संदर्भित प्रत्येक जेएस फ़ाइल के लिए प्रत्येक सीडीएन पथ को ओवरराइड करने की आवश्यकता होगी। ऐसा लगता है कि यह अव्यवहारिक होगा। –

1

एक स्थिति आपसे मिलते-जुलते को संभालने के लिए प्रयोग करें, मैं BundleCollection कॉन्फ़िगर किया गया CDN और दो अलग अलग संस्करण का उपयोग करने डीबग और उत्पादन के लिए पुस्तकालय का।

इन सेटिंग्स का परिणाम है कि गैर minified एक जबकि डिबगिंग और न्यूनतम किया गया एक CDN से उत्पादन में इस्तेमाल किया जाएगा इस्तेमाल किया जाएगा। स्थानीय minified एक अनदेखा किया जाता है।

[...] 
bundles.UseCdn = true; 
[...] 
var jQueryBundle = new ScriptBundle("~/bundles/jquery"); 
jQueryBundle.CdnPath = "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"; 
jQueryBundle.Include("~/scripts/jquery-1.9.1.js"); 
jQueryBundle.Include("~/scripts/jquery-1.9.1.min.js"); 
bundles.Add(jQueryBundle); 

ध्यान दें कि मैं CdnPath में प्रोटोकॉल निर्दिष्ट नहीं किया है, ग्राहक के ब्राउज़र अपने मौजूदा प्रोटोकॉल ग्राहक http या https से जुड़ा हुआ है का उपयोग करेगा।

ग्राहक के ब्राउज़र उत्पादन में निम्नलिखित टैग प्राप्त होगा:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 

डेवलपर ब्राउज़र निम्नलिखित टैग प्राप्त होगा:

<script src="/Scripts/jquery-1.9.1.js"></script> 

दोनों ब्राउज़र पर सही प्रोटोकॉल का प्रयोग करेंगे।

0

गीलेर आप @RazorASPX का उपयोग कर रहे हैं, मुझे लगता है कि आपके पास Layout/MasterPage कहीं है।

सीडीएन 'सच्ची शक्ति विशेष रूप से स्क्रिप्ट को आपके सर्वर की तुलना में किसी अन्य स्रोत से दूरस्थ रूप से होस्ट करने में निहित है। ऐसा करने की संभावना अधिक होती है कि उपयोगकर्ता के ब्राउज़र ने इसे किसी दूसरे स्थान से उठाया है। सीडीएन कोर लाइब्रेरीज़ के लिए सर्वश्रेष्ठ प्रदर्शन करते हैं, जैसे AngularJS या jQuery। आप जिस स्क्रिप्ट को आयात कर रहे हैं उससे कम लोकप्रिय है, सीडीएन के माध्यम से इसे कम करने की सिफारिश की जाती है।

मुझे यह आपके लेआउट पर हार्डकोड के लिए अधिक उपयुक्त लगता है। यदि आप केवल // का उपयोग करते हैं तो http:// या https:// के साथ प्रोटोकॉल निर्दिष्ट करने के लिए इसे उसी प्रोटोकॉल को उठाया जाना चाहिए जिसे पृष्ठ कहा जा रहा है।

<script type="text/javascript" src="//{yourCDNsource}"></script>

आप स्थानीय रूप से सेक/तो कम करें एक दूरस्थ CDN यह उद्देश्य को हरा दिया। उन लोगों के लिए NuGet या Bower का बेहतर उपयोग करें।

चेक Google CDNs