2010-11-24 12 views
6

मेरी डब्ल्यूसीएफ सेवा एक https और एक http endpoint का खुलासा करता है। एसएसएल के अलावा वे समान हैं। वे एक ही कोड पर नक्शा करते हैं।आईआईएस में होस्ट किए जाने पर कोड से डब्ल्यूसीएफ सेवा को कैसे कॉन्फ़िगर करें?

अंतिम प्रयोजन बाहरी उपयोगकर्ताओं के लिए http, आंतरिक उपयोगकर्ताओं को http का उपयोग करने के लिए कनेक्ट करने के लिए है।

विकास में यह मुझे एक समस्या देता है। वीएस में पैक किए गए विकास वेब सर्वर कैसिनी, एसएसएल से नफरत करता है।

मुझे आश्चर्य है कि क्या मैं कोड से सेवा को कॉन्फ़िगर कर सकता हूं, इसलिए कैसिनी के तहत चलते समय, मैं https को कॉन्फ़िगर नहीं करता।

इसलिए सवाल - यदि आईआईएस होस्ट किया गया है तो मैं कोड से सेवा को कैसे कॉन्फ़िगर कर सकता हूं? मैं वैकल्पिक उत्तरों के साथ बहुत खुश हूं कि मैं कैसिनी को कॉन्फ़िगरेशन के https भाग के बारे में शिकायत नहीं करने के लिए कैसे राजी कर सकता हूं।

उत्तर

3

जब आप आईआईएस में होस्टिंग करते हैं, तो आप आईआईएस के दायरे में बहुत सावधानी बरत रहे हैं - आप वास्तव में इस मामले में अपनी सेवा को पकड़ नहीं सकते हैं।

आईआईएस आपके * .svc फ़ाइल के आधार पर आवश्यक ServiceHost को कताई करने का ख्याल रखेगा - वास्तव में आप इसके बारे में बहुत कुछ नहीं कर सकते हैं।

मेरे समाधान अलग होगा - अपने विन्यास फाइल में <service> टैग बाह्यरूप (web.config):

<system.serviceModel> 
    <services>  
    <service configSource="service.dev.config" /> 
    </services> 
</system.serviceModel> 

अपने देव वातावरण में, केवल http endpoint का पर्दाफाश - इसलिए आपकी service.dev.config कुछ इस तरह दिखेगा:

<service name="....."> 
    <endpoint name="default" 
       address="....." 
       binding="basicHttpBinding" bindingConfiguration="insecure" 
       contract="......" /> 
</service> 

एक दूसरे service.prod.config जो तब दोनों अंतिमबिंदुओं शामिल बनाएँ - http और https:

<service name="....."> 
    <endpoint name="default" 
       address="....." 
       binding="basicHttpBinding" bindingConfiguration="insecure" 
       contract="......" /> 
    <endpoint name="secure" 
       address="....." 
       binding="basicHttpBinding" bindingConfiguration="secure" 
       contract="......" /> 
</service> 

और संदर्भ है कि आपके web.config पर तैनाती सर्वर पर।

+1

मुझे एहसास हुआ कि यह सबसे अच्छा था जिसे मैं प्राप्त करने में सक्षम था। धन्यवाद। – RichardHowells

+0

मेरे पास कई सेवाएं हैं, इसलिए मैंने अंततः पूरे अनुभाग को बाहरी किया। Web.config के लिए xml intellisense ऐसा लगता है कि आप सेवा टैग पर configSource का उपयोग नहीं कर सकते हैं। मैंने इंटेलिजेंस को नजरअंदाज कर दिया और यह काम करता है। – RichardHowells

+0

@ रिचर्डहोवेल्स: हाँ, विजुअल स्टूडियो इंटेलिजेंस इस बारे में बुद्धिमान नहीं है - लेकिन यह काम करता है, जैसा कि आपने देखा है :-) –

9

"आईआईएस आपके * .svc फ़ाइल के आधार पर आवश्यक सर्विसहोस्ट को कताई करने का ख्याल रखेगा - वास्तव में आप इसके बारे में बहुत कुछ नहीं कर सकते हैं।"

सत्य के बहुत करीब नहीं है। आपकी सेवा की एसवीसी फ़ाइल में बिल्कुल फैक्ट्री नामक विशेषता है। जहां आप वर्ग और एस्सेबल निर्दिष्ट कर सकते हैं जहां कक्षा स्थित है। इस वर्ग के वेब की अपनी खुद की वंशज हो सकता है | DataServiceHostFactory तो अपने एसवीसी मार्कअप इस

<%@ ServiceHost 
Language="C#" 
Debug="true" 
Service="name.space.myService" 
CodeBehind="name.space.myService.svc.sc" 
Factory = "name.space.WebServiceHostFactoryEx, assembly.name" 
%> 

WebServiceHostFactory हर सेवा हिट के लिए बनाया जाएगा और अपने मेजबान से आपकी इच्छानुसार पुन: होगा कैसा दिखेगा।

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

वहाँ सेवाओं है कि एक ही तरह से प्रारंभ कर रहे हैं की जोड़ी के लिए पर्यावरण की मेजबानी की मिशेल बस्टामेंटे here

से बहुत अच्छा पोस्ट मैं आईआईएस में इस का उपयोग कर रहा है।

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

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