2008-11-11 32 views
14

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो अब तक एक छोटा स्टैंडअलोन http सर्वर प्रदान करने के लिए HttpListener का उपयोग कर रहा है। हालांकि, मैंने हाल ही में पाया है कि एचटीपी लिस्टनर को प्रशासक के रूप में चलाने की जरूरत है, जो हमेशा संभव नहीं होता है।HttpListener के लिए वैकल्पिक?

सबसे अच्छा विकल्प क्या होगा? मुझे http GET और POST की आवश्यकता है, जिनमें से दोनों फाइल सिस्टम पर फ़ाइलों को पढ़/लिख नहीं रहे हैं, उन्हें कस्टम .NET कोड चलाने की आवश्यकता है।

मेरा शोध अब तक कैसिनी लाया है, लेकिन जहां तक ​​मैं कह सकता हूं, मुझे एक कस्टम संस्करण लिखना होगा। क्या कुछ और है? HttpListener के समान इंटरफेस के साथ कुछ विशेष रूप से, लेकिन इसके लिए प्रशासक विशेषाधिकारों की आवश्यकता नहीं है!

+9

एचटीपी लिस्टनर को व्यवस्थापक के रूप में चलाने की आवश्यकता नहीं है यदि आप सही "netsh http add urlacl ..." सामान पहले –

उत्तर

8

कोडप्लेक्स पर मुझे मिला एक विकल्प C# Webserver है।

"... एक लचीला http सर्वर जो किसी भी नेट आवेदन में एम्बेड किया जा सकता है। यह एक मॉड्यूलर डिजाइन जहां सुविधाओं मॉड्यूल का उपयोग करके जोड़ी है। सर्वर भी बाकी है और सभी http क्रियाओं का समर्थन करता है ..."

इसमें एक एचटीपी लिस्टनर क्लास है जो मुझे लगता है कि System.Net.HttpListener के समान है, लेकिन मैंने उनमें से किसी एक का उपयोग नहीं किया है, इसलिए मैं निश्चित नहीं हो सकता।

+0

मेरा मानना ​​है कि यह सॉकेट आधारित है, प्रशासनिक प्रावधानों की आवश्यकता नहीं है। –

+0

वूप्स, क्रिस किम्पटन का लिंक उसी प्रोजेक्ट को इंगित करता है, केवल कोडपेक्स के बजाय कोडप्रोजेक्ट पर। –

3

इसका एक समाधान this other question द्वारा कवर किया गया है - आप स्वयं को गैर-व्यवस्थापक के रूप में HttpListener चलाने के लिए अनुमति दे सकते हैं।

आप ऐप को कमांड फ़ाइल से शुरू करने के लिए प्राप्त कर सकते हैं जो अनुमतियों को टाइप करता है और फिर असली ऐप चलाता है।

+0

यह वास्तव में एक विकल्प नहीं है नियमित डेस्कटॉप एप्लिकेशन के रूप में एप्लिकेशन को आसानी से इंस्टॉल करने योग्य होना चाहिए। – Grokys

+0

मैं नेटस्हे मार्ग से नीचे गया हूं। मुझे लगता है कि मैं इंस्टॉलर के हिस्से के रूप में नेटस् कमांड चला सकता हूं। कई इंस्टॉलर उन्नत अनुमतियों का अनुरोध करते हैं, भले ही एप्लिकेशन नहीं करता है। –

0

ठीक है, तो आपके पास एक नियमित डेस्कटॉप ऐप है जिसमें इनबाउंड http कनेक्शन की अनुमति देने की आवश्यकता है - हम्म - विंडोज फ़ायरवॉल एक मुद्दा नहीं होगा?

मान लीजिए, यह लगभग एक webservice की तरह लगता है - क्या आप उस मार्ग पर जा सकते हैं - उसके माध्यम से यूआरएल का पर्दाफाश करें? हालांकि मेरा .NET ज्ञान यह जानने के लिए पर्याप्त गहरा नहीं है कि आपको अभी भी अनुरोधों का उत्तर देने के लिए एक विशिष्ट http सर्वर चलाने की आवश्यकता है या नहीं। Spring.Net शायद एक नजर लायक है।

+0

नहीं, यह केवल स्थानीयहोस्ट से कनेक्शन प्राप्त करेगा - एप्लिकेशन एक एडोब एआईआर एप्लिकेशन के लिए एक प्रॉक्सी है जो एक ही समय में स्थापित है। – Grokys

+0

इसके अलावा, मैंने वेब सर्विसेज पर विचार किया है लेकिन सर्वर मुख्य रूप से बाइनरी की सेवा करेगा, जो वेब सर्विसेज के लिए उपयुक्त नहीं है। – Grokys

3

अपनी पोस्ट पर विल डीन द्वारा टिप्पणी की तरह कहते हैं, तो आपको निम्न netsh आदेश चला सकते हैं:

netsh http add urlacl url=http://+:8346/ user="NTAuthority\Authenticated Users" sddl="D:(A;;GX;;;AU)" 

स्थानापन्न 'http: // +: 8346 /' अपने मूल्य के साथ, और इस की अनुमति देगा लक्षित एंडपॉइंट पर वेबसर्वर चलाने के लिए कोई प्रमाणीकृत उपयोगकर्ता। ,

मैं हाल ही में पता चला है HttpListener प्रशासक

पूरी तरह सच नहीं है और अन्य कुछ उत्तर कारणों में से एक पर स्पर्श कि के रूप में चलाने की जरूरत है:

+0

यह मेरे लिए काम नहीं किया; इसके परिणामस्वरूप सिस्टम दिए गए बंदरगाह पर HTTP के लिए सुन रहा है, लेकिन 503 सेवा के साथ सभी कनेक्शन अस्वीकार कर रहा है। – jimrandomh

+0

@jimrandomh - पंजीकरण के लिए अपने पूरे डोमेन में डालने का प्रयास करें। उदाहरण: 'नेट्स http http urlacl url = http: //www.mytestdomain.com: 8346/उपयोगकर्ता =" एनटीए प्राधिकरण \ प्रमाणीकृत उपयोगकर्ता "sddl =" डी: (ए;; जीएक्स ;; एयू) "' [साथ ही, आप इस टूल के साथ अपने यूआरएल आरक्षणों को जांच/संशोधित कर सकते हैं - http://urlreservation.codeplex.com/](http://urlreservation.codeplex.com/) – ctrlplusb

+0

और अपनी फ़ायरवॉल सेटिंग भी न भूलें। :) आपका फ़ायरवॉल कनेक्शन अवरुद्ध हो सकता है। इसे अस्थायी रूप से अक्षम करने का प्रयास करें और फिर यह सुनिश्चित करने के लिए फिर से कनेक्ट करने का प्रयास करें कि यह समस्या नहीं है। – ctrlplusb

2

बयान के बारे में लेकिन एक और है:

  1. अन्य पोस्टर्स द्वारा नोट किया गया: आप एक गैर-प्रशासक को अनुमति दे सकते हैं। ठीक है, लेकिन महान नहीं है।
  2. आप व्यवस्थापक होने के बिना पोर्ट 80 पर भी स्थानीयहोस्ट पर सुन सकते हैं। नोट: मुझे याद है कि केवल "लोकलहोस्ट" काम करता है और नहीं "127.0.0.1" ... इसलिए सुनिश्चित करें कि आप अपने उपसर्गों में लोकलहोस्ट पास करते हैं। कॉल जोड़ें।

हम चाहते हैं कि डेवलपर के लिए अपने पीसी पर एक HTTP आधारित एप्लिकेशन मेजबान को चलाने के लिए और हम पहली बार में व्यवस्थापक के कारण HttpListener का उपयोग कर संभव नहीं होगा सोचा (या व्यवस्थापक दी गई अनुमतियों) की अनुमति देता है एक आंतरिक उपकरण शिपिंग रहे हैं समस्या , लेकिन फिर हमने पाया कि लोकलहोस्ट व्यवस्थापक के बिना ठीक काम करता है। यह समझ में आता है: बाहरी रूप से सुनना "खतरनाक" है लेकिन स्थानीय मशीन पर सुनना खतरनाक नहीं है।

0

Nowin एक महान lib है जिसे OwinServerFactory में HttpListener पर निर्भरता के बिना एकीकृत किया जा सकता है। बिना किसी हिच के Microsoft.Owin.Host.HttpListener lib को प्रतिस्थापित करने में सक्षम थे

+0

हाय, मैं एक ही बिंदु पर अटक गया। क्या आप एचटीपी लिस्टनर को बदलने में मेरी मदद कर सकते हैं? –

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