2012-03-30 20 views
6

में बड़े समवर्ती HTTP POSTs को संभालना एक क्लाइंट पेज मेरी एएसपी.NET साइट (एएसएक्स हैंडलर) में मल्टीपार्ट फॉर्म डेटा (फाइल) पोस्ट करने के लिए जावास्क्रिप्ट का उपयोग करता है।एएसपी.नेट आवेदन

उपयोगकर्ता कई फाइलों का चयन करता है और एक समवर्ती अपलोड शुरू करता है। जब फ़ाइलें 150 एमबी + की तरह होती हैं, तो यह एएसपी.NET सर्वर पक्ष के कई समवर्ती पोस्ट हैंडलर उत्पन्न करती है।

मेरे पास कैप्चा कार्यक्षमता के साथ सत्र नियंत्रण लागू किया गया है, यह जानने के लिए कि क्या यह मेरे सर्वर को बाढ़ नहीं कर रहा है।

लेकिन समस्या प्रारंभिक अपलोड शुरूआत के साथ है।

हर बार एक हैंडलर एक POST कार्रवाई करने के लिए है, यह सत्र (अपने कस्टम सत्र, प्रति उपयोगकर्ता पेज एक) के एक आईडी की जांच करता है, और फ़ाइलों प्रति सत्र POST एड का कुल आकार को Request.ContentLength आकार कहते हैं। यह डेटा एक एक्सएमएल में सहेजा गया है।

लेकिन चूंकि कई प्रारंभिक पोस्ट एक साथ होते हैं, इसलिए एक एक्सएमएल लेखक जो बाइट्स "चुक्स" के योग को रिकॉर्ड करता है और सभी प्रारंभिक POST एस के लिए प्रति सत्र 0 बाइट्स रिपोर्ट करता है, क्योंकि वे एक ही समय में आते हैं।

मैंने lock को persister ऑब्जेक्ट (जो एक्सएमएल-लेखन करता है) पर लागू किया है, लेकिन अब तक एक पोस्ट पूरी तरह से संसाधित नहीं होने तक, अन्य लोग आगे नहीं बढ़ सकते हैं।

भले ही मैं "अपलोड सीमा के बाद" अनुरोधों के साथ कुछ भी नहीं करता हूं, फिर भी वे सर्वर पर डेटा अपलोड करने में समय लेते हैं।

तो मेरी प्रश्न हैं:

कई समवर्ती POST अपलोड कार्रवाई करने के लिए सही पैटर्न क्या है?

क्या एएसपी.NET हैंडलर कोड में अनुरोध फ़िल्टर होने के तुरंत बाद POST को तुरंत छोड़ने का कोई तरीका है, और क्लाइंट को आईआईएस में डेटा अपलोड करने का प्रयास सहेजने का कोई तरीका है?

अद्यतन: जब lock केवल XML लेखन/अधिकतम सत्र लंबाई गणना पर आईएनजी में अभी भी समरूपता है, जो कि अच्छा है। अब मुझे केवल यह पता लगाने की आवश्यकता है कि एशक्स हैंडलर कोड से तुरंत सत्र कैसे छोड़ें।

+0

सभी http एक ही फाइल को लिखित अनुरोध कर रहे हैं? खराब डिजाइन की तरह लगता है। आपको इसकी देखभाल करने के लिए कुछ संदेश कतार सेवा का उपयोग करने की सोचने की आवश्यकता हो सकती है। डाटाबेस में डेटा को जारी रखने के लिए भी सलाह दी जाती है। – deostroll

+0

यह मामला विशेष रूप से तब होता है जब उसी सत्र में (जिसका अर्थ एक ही फ़ोल्डर में होता है) दो समान नाम वाली फाइलें सहेजी जा रही हैं। डेटाबेस के लिए - यह एक अच्छा विचार है, लेकिन HttpPostedFile में एक SaveAs विधि है जो फ़ाइल सिस्टम पर पथ लेती है। मैंने एएसपी.NET के साथ फाइलों को डीबी में सीरियलाइज़ करने के तरीके को नहीं देखा है। –

उत्तर

1

क्या आपका एशक्स हैंडलर असीमित रूप से निष्पादित करने के लिए लिखा गया है? यदि नहीं, तो इस async ashx संचालकों को लागू करने के लिए एक महान लेख:

http://msdn.microsoft.com/en-us/magazine/cc163463.aspx

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