के साथ एकाधिक अनुरोधों को संभालने में मेरे पास एक .NET विंडोज सेवा है जो एक धागे को जन्म देती है जो मूल रूप से केवल HttpListener
के रूप में कार्य करती है। यह तुल्यकालिक मोड उदाहरण में ठीक समस्या मैं अब काम कर रहा है ...सी # एचटीपी लिस्टनर
private void CreateLListener()
{
HttpListenerContext context = null;
HttpListener listener = new HttpListener();
bool listen = true;
while(listen)
{
try
{
context = listener.GetContext();
}
catch (...)
{
listen = false;
}
// process request and make response
}
}
मैं इस से अधिक अनुरोध के साथ काम करने की जरूरत है और उन्हें जवाब दिया है करने के लिए एक साथ या कम से कम एक ओवरलैप तरीके से।
आगे की व्याख्या करने के लिए - क्लाइंट एक मीडिया प्लेयर ऐप है जो अनुरोध हेडर प्रॉपर्टी Range bytes=0-
के साथ मीडिया फ़ाइल के लिए अनुरोध करके शुरू होता है। जहां तक मैं यह कह सकता हूं कि मीडिया कंटेनर क्या है, यह काम करने के लिए यह करता है।
इसके बाद 'चंक' पढ़ा गया है (या यदि यह मीडिया प्रकार का पता लगाने के लिए पर्याप्त पढ़ा गया है) तो यह Range bytes=X-Y
के साथ एक और अनुरोध (एक अलग क्लाइंट सॉकेट नंबर से) बनाता है। इस मामले में वाई पहली प्रतिक्रिया में सामग्री-लंबाई लौटा दी गई है और एक्स उससे 250000 बाइट कम है (आईआईएस का परीक्षण के रूप में उपयोग किया गया है)। इस स्तर पर यह देखने के लिए आखिरी 'खंड' प्राप्त हो रहा है कि क्या यह गेज लंबाई के लिए मीडिया टाइम-स्टैंप प्राप्त कर सकता है।
इसे पढ़ने के बाद, यह मीडिया फ़ाइल को ठीक से स्ट्रीम करने के लिए Range bytes=0-
(किसी अन्य सॉकेट नंबर से) के साथ एक और अनुरोध करता है।
किसी भी समय, यदि ग्राहक का उपयोगकर्ता 'छोड़ें' ऑपरेशन करता है तो यह Range bytes=Z-
के साथ एक और अनुरोध (अभी तक एक और सॉकेट नंबर से) भेजता है जहां ज़ेड मीडिया फ़ाइल में कूदने की स्थिति है।
मैं HTTP सामान के साथ बहुत अच्छा नहीं हूं लेकिन जहां तक मैं कह सकता हूं कि मुझे सुनने के लिए मूल HttpListener
मूल अनुमति देने के दौरान प्रत्येक अनुरोध/प्रतिक्रिया को संभालने के लिए कई धागे का उपयोग करने की आवश्यकता है। मैंने बहुत सारी खोज की है लेकिन फिट होने के लिए एक मॉडल नहीं मिल रहा है।
संपादित करें:
निम्न उदाहरण जो मैं अपने आवश्यकताओं के अनुरूप करने के लिए अनुकूलित करने में सक्षम था की पावती और रिक Strahl के लिए आभार ...
Add a Web Server to your .NET 2.0 app with a few lines of code
इसे करने के लिए बिल्कुल सही तरीका है, लेकिन Async प्रोग्रामिंग के साथ पकड़ने के लिए आपको बेहतर –