2016-04-12 5 views
9

के साथ WebHttp बाइंडिंग मैं वेबसाइट के लिए https & http का उपयोग करने की कोशिश कर रहा हूं। वेबसाइट में .svc फ़ाइलें हैं जो आरईएसटी सेवा के रूप में कार्य करती हैं और जावास्क्रिप्ट से बुलाती हैं।एचटीपी और एचटीपीएस

मेरे कॉन्फ़िग:

<system.serviceModel> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="AjaxBehavior"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="MyServiceBehaviour"> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceMetadata httpGetEnabled="True" httpsGetEnabled="true"/>   
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <services> 
     <service behaviorConfiguration="MyServiceBehaviour" name="MyService.Lookups"> 
     <endpoint address="" behaviorConfiguration="AjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="httpWebBinding" contract="MyService.Lookups" >   
     </endpoint> 
     <endpoint address="" behaviorConfiguration="AjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="httpsWebBinding" contract="MyService.Lookups" >   
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <bindings>  
     <webHttpBinding> 
     <binding name="httpsWebBinding"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None" proxyCredentialType="None" /> 
      </security> 
     </binding> 
     <binding name="httpWebBinding"> 
      <security mode="None"> 
      <transport clientCredentialType="None" proxyCredentialType="None" /> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 

ब्राउज़िंग https://myserver/services/Lookups.svc/Hello देता

एक आधार पता है कि बाध्यकारी WebHttpBinding साथ अंत बिंदु के लिए योजना http मेल खाता नहीं मिल सका। पंजीकृत आधार पते योजनाओं [https]

ब्राउज़िंग http://myserver/services/Lookups.svc/Hello देता हैं

एक आधार पता है कि बाध्यकारी WebHttpBinding साथ अंत बिंदु के लिए योजना https से मेल खाता नहीं मिल सका। पंजीकृत आधार पता योजनाएं हैं [http]

यदि मैं किसी भी एक एंडपॉइंट को हटा देता हूं तो यह काम करता है। उदाहरण bindingConfiguration="httpWebBinding" के साथ कॉन्फ़िगर किए गए एंडपॉइंट को हटाकर HTTPS,

मैं इसे HTTP और HTTPS के साथ कैसे काम कर सकता हूं? अभी तक, मैं एक एंडपॉइंट को हटाकर या तो http या https का उपयोग करने में सक्षम हूं।

भेजा How can I combine the WCF services config for both http and https in one web.config? और How do you setup HTTP and HTTPS WCF 4 RESTful services?

नोट: आईआईएस में, यह दो वेब साइटों एक https पर http और एक अन्य पर सुनने है। दोनों भौतिक फ़ोल्डर में

अद्यतन एक ही कोड साझा करने: अब के रूप में, मैं अंतिम बिंदुओं को हटा दिया है और यह काम करता है। लेकिन मेरी चिंता व्यवहार के साथ कॉन्फ़िगर किए गए एंडपोइंग को हटा रहा है कॉन्फ़िगरेशन मेरे लिए बहुत अच्छा समाधान नहीं दिखता है।

यह दोनों http & https

<services> 
     <service behaviorConfiguration="MyServiceBehaviour" name="MyService.Lookups"> 

     </service> 
    </services> 
+1

'httpsGetEnabled =" true "के साथ' https' url होना चाहिए, लेकिन आपने किसी को परिभाषित नहीं किया है। –

उत्तर

4

मैं अपने परिदृश्य निर्मित और अपने परीक्षण सेवा के लिए अंतिम बिंदु कॉन्फ़िगर करने के लिए अपने web.config का उपयोग किया है के लिए काम करता है। आपकी कॉन्फ़िगरेशन ठीक है और सही तरीके से काम करती है। वह हिस्सा जो आपके लिए काम नहीं करता है शायद आईआईएस में आपका https कॉन्फ़िगरेशन है। सुनिश्चित करें कि आपने अपनी सेवा में https पहुंच सक्षम की है। यदि आप विजुअल स्टूडियो से IISExpress के साथ इसका परीक्षण करते हैं तो अपने प्रोजेक्ट पर और प्रॉपर्टी विंडो (व्यू -> प्रॉपर्टी विंडो) में बायाँ क्लिक करें SSL सक्षम = True के लिए चुनें।

+0

हां। सर्वर में, हमने 'https' बाध्यकारी बनाया है और स्वयं हस्ताक्षरित प्रमाणपत्र रखा है। चूंकि हम म्यूचुअल प्रमाणीकरण का उपयोग नहीं कर रहे हैं, हमने आईआईएस 8.5 में एसएसएल सेटिंग्स में 'RequSSL' ध्वज को सक्षम नहीं किया है – Billa

0

जैसा कि @ लेस्मिअन ने अपने उत्तर में बताया, यह मुद्दा आपके आईआईएस कॉन्फ़िगरेशन में है। अधिक विशेष रूप में:

नोट: आईआईएस में, यह दो वेब साइटों एक https पर http और एक अन्य पर सुनने है। दोनों भौतिक फ़ोल्डर

कारण यह है कि आईआईएस एक स्कीमा पर एंडपॉइंट्स को संभाल नहीं सकता है, जो इसका समर्थन नहीं करता है।

आपके पास दो साइटें हैं, और उनमें से एक में HTTP बाध्यकारी है लेकिन इसमें HTTPS नहीं है, और दूसरे में HTTPS है लेकिन HTTP नहीं है।

तो जब आप करने के लिए http ब्राउज़: // यूआरएल, आईआईएस आप के लिए निर्देशित करता है http सक्षम साइट, web.config पढ़ता है, देखता है कि यह पंजीकृत करता https endpoint (जो द्वारा समर्थित नहीं है (आश्चर्य!) साइट) और अपवाद को फेंकता है कि httpshttp- केवल-सक्षम साइट पर योजना समर्थन है।

आप https करने के लिए ब्राउज़ करते हैं: // यूआरएल स्थिति समान है - आईआईएस आप https -सक्षम-केवल साइट पर उपयोग करने के लिए http endpoint अनुमति नहीं है।

समस्या को संभालने के लिए आप दो बाइंडिंग वाले एक साइट का बेहतर उपयोग करते हैं।

एक और (और अधिक जटिल) विकल्प साइटों के लिए अलग web.configs का उपयोग करेंगे: अलग साइटों की स्थापना की और विजुअल स्टूडियो के प्रकाशन और web.config बदलने उपकरणों का उपयोग (अलग फ़ोल्डर की ओर इशारा)

0

हैं आप अपनी एंडपॉइंट कॉन्फ़िगरेशन जैसे अपडेट करते हैं:

 <endpoint address="http://myserver/services/Lookups.svc" behaviorConfiguration="AjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="httpWebBinding" contract="MyService.Lookups" >   
     </endpoint> 
     <endpoint address="https://myserver/services/Lookups.svc" behaviorConfiguration="AjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="httpsWebBinding" contract="MyService.Lookups" >   
     </endpoint> 

मैंने प्रोड सिस्टम के साथ एक समान नृत्य किया है, और यह मेरा समाधान था। उम्मीद है कि यह आपके लिए भी काम करता है।

0

इस कोड को जोड़ें।

<protocolMapping> 
    <add scheme="http" binding="webHttpBinding" bindingConfiguration="httpWebBinding"/> 
    <add scheme="https" binding="webHttpBinding" bindingConfiguration="httpsWebBinding"/> 
</protocolMapping> 
संबंधित मुद्दे