2011-01-25 12 views
23

के साथ डब्ल्यूसीएफ सेवा को तैनात करना मैंने सिल्वरलाइट ऐप द्वारा खपत के लिए डब्ल्यूसीएफ वेब सेवा लिखी है। प्रारंभ में, सेवा केवल एक बुनियादी http बाध्यकारी की आवश्यकता थी। अब हमें http और https दोनों के तहत उपयोग के लिए सेवा को तैनात करने में सक्षम होना चाहिए।दोनों http और https बाइंडिंग/एंडपॉइंट्स

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="SilverlightFaultBehavior"> 
     <silverlightFaults /> 
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="CxtMappingWebService.CxtMappingWebServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <bindings> 
    <basicHttpBinding> 
     <binding name="SecureHttpBinding"> 
     <security mode="Transport" /> 
     </binding> 
     <binding name="BasicHttpBinding"> 
     <security mode="None" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <services> 
    <service name="CxtMappingWebService.CxtMappingWebService" behaviorConfiguration="CxtMappingWebService.CxtMappingWebServiceBehavior"> 
     <endpoint address="" bindingConfiguration="SecureHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> 
     <endpoint address="" bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 
</system.serviceModel> 

दुर्भाग्य से, हालांकि, वहाँ एक समस्या इस के साथ है: मुझे लगता है कि इस प्रकार मुझे ऐसा करने की अनुमति web.config के लिए कुछ सेटिंग्स पाया है।

इस वेब सेवा को हमारे सैकड़ों ग्राहकों के सर्वर पर तैनात करने की आवश्यकता है, और वे सभी https का उपयोग नहीं करेंगे। इसे उस सर्वर पर तैनात करना जिसमें आईआईएस में कोई https बाध्यकारी सेट अप नहीं है, यह विफल हो जाता है। क्या आईआईएस में कोई https बाध्यकारी सेट अप नहीं होने पर डिफ़ॉल्ट रूप से web.config में इन दोनों बाइंडिंग को मरने के बिना कोई तरीका है?

हमें इस समस्या के लिए एक संभावित समाधान मिला है, लेकिन यह वास्तव में हमारी तैनाती आवश्यकताओं के अनुरूप नहीं है।

क्या किसी और को इससे पहले ऐसा कुछ सामना करना पड़ा है, और आपने इसे कैसे हल किया?

+0

*** silverlightFaults *** क्या है? – Kiquenet

उत्तर

5

यदि आप इंस्टॉलर का उपयोग नहीं करते हैं तो इस पृष्ठ पर स्वीकृत उत्तर अधिक उपयोग नहीं है। सही उत्तर ओपी द्वारा बाद में संपादित में निहित है, सभी को केवल आईआईएस में http और https पोर्ट्स को बांधना है और फिर नीचे कॉन्फ़िगरेशन का उपयोग करना है।

  <service name="CxtMappingWebService.CxtMappingWebService" behaviorConfiguration="CxtMappingWebService.CxtMappingWebServiceBehavior"> 
       <endpoint address="" bindingConfiguration="SecureHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> 
       <endpoint address="" bindingConfiguration="BasicHttpBinding" binding="basicHttpBinding" contract="CxtMappingWebService.ICxtMappingWebService" behaviorConfiguration="SilverlightFaultBehavior" /> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
      </service> 

यह मेरे लिए ठीक काम करता है!

+0

मैं इसे क्यों कोशिश करता हूं, मुझे सेवा एक्टिवेशन अपवाद मिलता है। ... संकलन के दौरान अपवाद के कारण सक्रिय नहीं किया जा सकता है। अपवाद संदेश है: सिंक्रनाइज़ किए गए कोडेड कोलेक्शन के लिए एक ही कुंजी के साथ दो आइटम नहीं जोड़ सकते .. ---> सिस्टम। ऑर्ग्यूमेंट अपवाद: सिंक्रनाइज़ किए गए कोडेड कोलेक्शन के लिए एक ही कुंजी के साथ दो आइटम नहीं जोड़ सकते –

1

आपके दो अंतिम बिंदुओं में एक ही यूआरआई है। डब्ल्यूसीएफ में इसकी अनुमति नहीं है। आप अलग-अलग बाइंडिंग के साथ एंडपॉइंट्स निर्दिष्ट करने में सक्षम होना चाहिए, लेकिन यूआरआई अलग होना चाहिए (यानी अलग-अलग पोर्ट नंबर या अलग अनुबंध)।

+1

यही वह विचार है जब तक मैंने इसे इस तरह से कॉन्फ़िगर नहीं किया कि यह काम करेगा या नहीं, और जो भी कारण हो, शायद इस तथ्य के कारण कि आईआईएस में https बाध्यकारी पोर्ट 443 के लिए स्थापित है। केवल एक चीज जो ' टी काम एक मशीन पर चलाने की कोशिश कर रहा है जहां आईआईएस में https बाध्यकारी सेट अप नहीं है। – Zannjaminderson

+1

अनुबंध फ़िल्टरिंग और एंडपॉइंट पते और सुनोरी के बीच भेद के कारण आप वास्तव में एकाधिक अंतराल पर एक ही पता कर सकते हैं। विवरण के लिए [एकल सुनोयूरी पर एकाधिक अंतराल] देखें (http://msdn.microsoft.com/en-us/library/aa395210.aspx)। – BitMask777

+0

मेरे पास यह _bindings_ है ('(टाइप: होस्टनाम: पोर्ट)') आईआईएस में: *** http: कोई होस्टनाम नहीं: 4975 9 ***, *** https: pre.company.es: 443 *** और ** * http: pre.company.es: 80 ***, और मेरे ** यूआरआई ** _। *** बेसड्रेस ***: _http: // preserver: 49759/vdir1/SilverlightServices/serv.svc_ और _https: //pre.company.es/vdir1/SilverlightServices/serv.svc_ ** पता * *? – Kiquenet

4

यह उस इंस्टॉलर द्वारा संभाला जाएगा जिसका उपयोग आप सेवा को तैनात करने के लिए करते हैं। दोनों एंडपॉइंट्स या केवल http एक को तैनात करने के लिए यह एक पूर्व शर्त (या कम से कम इंस्टॉलर में एक विकल्प छोड़ना चाहिए) होना चाहिए।

10

अंत में, हम तो जैसे, web.config की बाइंडिंग, व्यवहार, और सेवाओं वर्गों के लिए configSource विशेषता का उपयोग बाहरी फाइलों के साथ जाने का फैसला किया:

<bindings configSource="bindings.config" /> 
<behaviors configSource="behaviors.config" /> 
<services configSource="services.config" /> 

इस तरह, हम यह तैनात डिफ़ॉल्ट रूप से केवल उन HTTP फ़ाइलों के लिए सेट की गई बाहरी फ़ाइलों के साथ, और https पहुंच के लिए सेट अप करने के लिए बाहरी फ़ाइलों को संपादित करने के तरीके पर ग्राहक निर्देश (या उनकी सहायता करें) दें। यह हमें बाहरी कॉन्फ़िगरेशन फ़ाइलों को ओवरराइट किए बिना वेब.कॉन्फिग में भविष्य में हुए बदलावों को भी तैनात करने की अनुमति देता है।

+0

क्या आपने http और https बाध्यकारी के लिए किसी भी समाधान की कोशिश की? कोई *।http-https या केवल http के लिए कॉन्फ़िगर करता है? – Kiquenet

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