2010-09-10 21 views
19

पर डब्ल्यूसीएफ की मेजबानी की है मैंने MSDN से these instructions के अनुसार एक SSL प्रमाणपत्र बनाया और कॉन्फ़िगर किया है। मुझे त्रुटि संदेश मिल रहा है कि this question सूचियां, लेकिन मुझे यकीन नहीं है कि उस प्रश्न में स्वीकृत उत्तर को मेरी App.config फ़ाइल में कैसे मैप करना है। कॉन्फ़िगरेशन फ़ाइल की सामग्री, और सेवा स्वयं http पर सही ढंग से काम करती है, यह सिर्फ https पर है कि समस्या हो रही है।विंडोज सेवा ने एचटीटीपीएस

मेरे App.config फ़ाइल वर्तमान में है:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="TransportSecurity"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None"/> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service name="LookupServiceHost" behaviorConfiguration="serviceBehaviour"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="https://localhost:54321/MyService"/> 
      </baseAddresses> 
     </host> 
     <endpoint address="" binding="wsHttpBinding" contract="ILookupService" bindingConfiguration="TransportSecurity" /> 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehaviour"> 
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="False"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

त्रुटि अपवाद Windows ईवेंट लॉग इन लौटे:

सेवा प्रारंभ नहीं किया जा सकता है। System.ServiceModel.AddressAlreadyInUseException: HTTP यूआरएल https://+:54321/MyService/ पंजीकृत नहीं कर सका। एक और एप्लीकेशन पहले से ही इस यूआरएल को HTTP.SYS के साथ पंजीकृत कर चुका है। ---> System.Net.HttpListenerException: उपसर्ग 'https://+:54321/MyService/' पर सुनने में विफल रहा क्योंकि यह मशीन पर मौजूदा पंजीकरण के साथ संघर्ष करता है।

क्या कोई मुझे यह सक्षम करने के लिए एक सूचक दे ​​सकता है?

+0

में विजुअल स्टूडियो चला रहे हैं क्योंकि यह .NET है, आपको एक त्रुटि संदेश प्राप्त नहीं हो रहा है, आपको अपवाद प्राप्त हो रहा है। कृपया पूरा अपवाद पोस्ट करें। –

+6

@ जॉन, पेडेंट्री एक तरफ, मैंने कहा था कि मुझे एक ही संदेश (आईएमओ) लिंक किए गए पोस्ट के रूप में प्राप्त हो रहा था। उस ने कहा, मैंने अपने प्रश्न के लिए विशिष्ट विवरण जोड़ा है। – Rob

उत्तर

25

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

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

ऊंचा विशेषाधिकारों के साथ कमांड प्रॉम्प्ट खोलें (प्रशासन के रूप में)। पहले जांच कर लें एसएसएल प्रमाणपत्र बंदरगाह को सही करने के लिए सौंपा गया है:

netsh http show sslcert 

से फोन करके जांच करें कि क्या HTTP सुन उस पोर्ट पर पंजीकृत है:

netsh http show urlacl 

यदि ऐसा है तो निम्न आदेश का उपयोग कि पंजीकरण दूर करने के लिए:

:
netsh http delete urlacl url=http://+:54321/MyService 

जोड़ें पंजीकरण फिर से HTTPS पर सुन समर्थन करने के लिए

netsh http add urlacl url=https://+:54321/MyService user=domain\userName 

जहां उपयोगकर्ता का खाता आपके विंडोज सेवा को चलाने के लिए उपयोग किया जाता है। यदि यह एक स्थानीय खाता केवल उपयोगकर्ता नाम का उपयोग करता है।

नोट: https के तहत, ऐसा लगता है कि वाइल्डकार्ड urlacl में उपयोग किया जाना चाहिए। Http के लिए विजुअल स्टूडियो डिफ़ॉल्ट urlacl से मेल खाने के लिए हम https://localhost:8733/... नहीं लिख सकते हैं। यह शायद समझ में आता है क्योंकि अनुरोधित होस्टनाम डिक्रिप्शन के बाद तक उपलब्ध नहीं है।

+0

क्या आप कॉल कर सकते हैं कि मुझे अपने .config फ़ाइल/नेटस्च रजिस्ट्रेशन में क्या परिवर्तन करना चाहिए? – Rob

+0

मैंने आपकी सेवा को पुनः पंजीकृत करने के लिए कुछ नेट्स कमांड जोड़े। –

+1

यह बिल्कुल ठीक था - मेरे पास गलत पोर्ट पंजीकृत था। गहरे छोर पर खुद को फेंकना स्पष्ट रूप से * नहीं * डब्ल्यूसीएफ और एचटीटीपीएस से निपटने का सबसे आसान तरीका है, खासकर एक ग्लास या दो शराब के बाद! =) – Rob

0

अलग-अलग स्पष्ट कारण, लेकिन एक ही लक्षण, जो इस पोस्ट के लिए रास्ता ढूंढते हैं।

मैंने एक ऐसा एप्लिकेशन चलाया जिसने "हमेशा काम किया" था, और विभिन्न (बाद में लॉग इन नहीं किया गया था क्योंकि मैं रिमोट डेस्कटॉप या स्थानीय रूप से इसे चलाने के संयोजन), लॉग इन और आउट, और इसे एक पुन: संकलित के साथ बदल रहा था अन्यथा एक अलग संस्करण संख्या के साथ समान संस्करण मुझे वही मिला "एक और एप्लिकेशन पहले से ही इस यूआरएल को पंजीकृत कर चुका है ... blah, blah"।

जाहिर है (?) पंजीकरण उस उदाहरण के लिए विशिष्ट था जो चल रहा था, और उस एप्लिकेशन के बंद होने पर जारी रहा। (?) किसी भी मामले में पुराने विंडोज एडेज, "जब संदेह में रिबूट किया गया" ने इसका ख्याल रखा। ऐप में कोई बदलाव नहीं होने के बाद यह कोई शिकायत नहीं हुआ। यह हो सकता है कि डी-रजिस्टर, इत्यादि भी काम करेगी। यह विंडोज 10 के तहत था - मैंने इसे विंडोज के पुराने संस्करणों के साथ कभी नहीं देखा है।

-1

व्यवस्थापक मोड के रूप में चलाएं में दृश्य स्टूडियो चलाने दृश्य स्टूडियो अनुप्रयोग बंद करें और व्यवस्थापक मोड में फिर से खोलने यह, यही कारण है कि त्रुटि चला गया है काफी है। HTTP त्रुटियां तब होती हैं जब आप गैर व्यवस्थापक मोड

+0

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

+0

होना चाहिए, जब भी मैं व्यवस्थापक मोड में प्रोजेक्ट को डीबग नहीं कर रहा हूं, मुझे हमेशा यह त्रुटि मिलती है, एक बार जब मैं समाधान बंद कर देता हूं और व्यवस्थापक मोड में वीएस खोलता हूं और डीबग करता हूं तो त्रुटि कभी नहीं होती है – Lavanya