पर आधारित डब्ल्यूसीएफ सेवा संदर्भ यूआरएल बदलना मेरे पास एक वेब एप्लिकेशन है जो कई डब्ल्यूसीएफ सेवाओं का उपयोग करता है। मैं अपने वेब अनुप्रयोग को विभिन्न वातावरण (देव, यूएटी, उत्पादन इत्यादि) में तैनात करता हूं। प्रत्येक पर्यावरण के लिए प्रत्येक डब्ल्यूसीएफ सेवा का यूआरएल अलग है। मैं .NET 3.5 और basicHttpBinding
sपर्यावरण
वेब एप्लिकेशन मेरी web.config फ़ाइल में मशीन-विशिष्ट सेटिंग्स का समर्थन करने के लिए एक ढांचे का उपयोग करता हूं।
System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress
संक्षेप में web.config में <system.serviceModel><bindings><basicHttpBinding><binding>
विन्यास दोहराया गया है: जब एक WCF सेवा क्लाइंट का एक उदाहरण instantiating मैं एक समारोह है कि निर्माता अधिभार कि तर्क लेता है का उपयोग कर WCF सेवा क्लाइंट के कहने बनाता है फोन सी # कोड में।
यह दृष्टिकोण अच्छी तरह से काम करता है।
हालांकि, अब मुझे एक डब्ल्यूसीएफ सेवा के साथ काम करने के लिए इस दृष्टिकोण को बढ़ाने की ज़रूरत है जो X509 प्रमाण पत्र का उपयोग करता है। इसका मतलब यह है कि मैं सी # कोड में web.config में निम्नलिखित अतिरिक्त सेटिंग्स को दोहराने के लिए है:
<!-- inside the binding section -->
<security mode="Message">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
<behaviors>
<endpointBehaviors>
<behavior name="MyServiceBehaviour">
<clientCredentials>
<clientCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" findValue="1234abcd" />
<serviceCertificate>
<defaultCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindByThumbprint" findValue="5678efgh" />
<authentication trustedStoreLocation="LocalMachine"
certificateValidationMode="None" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
मैं कुछ कठिनाई पता लगाना सी # में इस विन्यास कोड करने के लिए कैसे हो रहा है।
दो सवाल
- किसी को भी कई वातावरण भर में WCF सेवा संदर्भ यूआरएल के प्रबंधन के लिए एक बेहतर दृष्टिकोण की सिफारिश कर सकते हैं?
- वैकल्पिक रूप से, कैसे सी # में ऊपर web.config अनुभाग को दोहराने के लिए पर कोई सुझाव स्वागत किया जाएगा
मेरे उत्तर में कुछ अतिरिक्त विचार जोड़े गए - आप नामित बाइंडिंग इत्यादि के साथ इस तरह से जा सकते हैं कि आप अपने पर्यावरण के आधार पर नाम निर्धारित कर सकें और फिर अपनी कॉन्फ़िगरेशन फ़ाइल से उपयुक्त मान लोड कर सकें। –
निम्नलिखित प्रश्न इस http://stackoverflow.com/questions/798684/programmatically-set-identity-on-wcf-endpointaddress –
से संबंधित हैं, मुझे एहसास है कि आप कॉन्फ़िगरेशन फ़ाइलों की बजाय कोड में ऐसा कर रहे हैं, लेकिन कॉन्फ़िगरेशन का उपयोग क्यों नहीं करते परिवर्तन और उचित कॉन्फ़िगरेशन फ़ाइल (Web.config.dev, Web.config.Test, Web.config.Release, आदि) में पर्यावरण विशिष्ट सेटिंग्स रखें? – camainc