सर्विस फैब्रिक के लिए आप प्रति वातावरण रन-टाइम कॉन्फ़िगरेशन पैरामीटर कहाँ सेट और एक्सेस करते हैं?


82

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


यद्यपि मैं चाहता हूं कि वे वास्तव में कॉन्फिगरेशन
एडम प्लोचर

जवाबों:


145

स्थानीय स्तर पर सेवा फैब्रिक चलाने के लिए प्रति वातावरण चर में और क्लाउड में यह है कि आपको क्या करना चाहिए:

  1. सेवा / अभिनेता प्रोजेक्ट की Settings.xml फ़ाइल में अपने कस्टम कॉन्फिग सेक्शन और पैरामीटर जोड़ें (प्रोजेक्ट रूट से \ PackageRoot \ Config \ Settings.xml पर स्थित)। पैरामीटर को खाली छोड़ दें क्योंकि हम प्रति वातावरण में इन जगहों को स्थापित करेंगे। यहाँ एक उदाहरण है।
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<!-- Add your custom configuration sections and parameters here -->
    <Section Name="UserDatabase">
        <Parameter Name="UserDatabaseConnectionString" Value="" />
    </Section>
</Settings>
  1. आपके सर्विस फैब्रिक प्रोजेक्ट के ApplicationManifest.xml फ़ाइल में, आपके <ServiceManifestImport>प्रत्येक सम्मिलित प्रोजेक्ट के लिए तत्व होंगे । नीचे एक ऐसा <ConfigOverrides>तत्व होगा जहां हम घोषणा करेंगे कि हमारी सेवा फेब्रिक परियोजना में ApplicationParameters के नीचे स्थानीय और क्लाउड xml फ़ाइलों में प्रति वातावरण में निर्धारित मानों द्वारा हमारे कॉन्फ़िगरेशन के लिए कौन से मानों को दबाया जाएगा। उसी ApplicationManifest.xml फ़ाइल में, आपको स्थानीय और क्लाउड xml फ़ाइलों में मौजूद पैरामीटर को जोड़ने की आवश्यकता होगी, अन्यथा वे बिल्ड पर अधिलेखित हो जाएंगे।

ऊपर दिए गए उदाहरण के साथ जारी रखते हुए, यह इस प्रकार सेट किया जाएगा।

<Parameters>
    <Parameter Name="ServiceName_InstanceCount" DefaultValue="-1" />
    <Parameter Name="UserDatabaseConnectionString" DefaultValue="" />
</Parameters>
<ConfigOverrides>
    <ConfigOverride Name="Config">
        <Settings>
            <Section Name="UserDatabase">
                <Parameter Name="UserDatabaseConnectionString" Value="[UserDatabaseConnectionString]" />
            </Section>
        </Settings>
    </ConfigOverride>
</ConfigOverrides>
  1. अपने सर्विस फैब्रिक प्रोजेक्ट में ApplicationParameters के नीचे स्थानीय। Xml और cloud.xml फ़ाइलों में, आप अपने पर्यावरण को विशिष्ट चर जैसे निर्दिष्ट करेंगे।
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="ServiceName_InstanceCount" Value="1" />
        <Parameter Name="UserDatabaseConnectionString" Value="Server=(localdb)\MsSqlLocalDb;Database=Users;User=ReadOnlyUser;Password=XXXXX;" />
    </Parameters>
</Application>
  1. अंत में, आपकी सेवा / अभिनेता में आप इन प्रति-पर्यावरण कॉन्फ़िगरेशन चर का उपयोग कर सकते हैं।
var configurationPackage = Context.CodePackageActivationContext.GetConfigurationPackageObject("Config");

var connectionStringParameter = configurationPackage.Settings.Sections["UserDatabase"].Parameters["UserDatabaseConnectionString"];

101
क्या मैं सिर्फ "yuck!" कह सकता हूँ। यह एक सरल वातावरण आधारित सेटिंग के लिए निराशाजनक रूप से जटिल है। यह एसएफ टीम के कुछ देव प्रयास के लिए परिपक्व है।
ब्रेटट्रॉबी

मुझे यकीन नहीं है कि मैं क्या याद कर रहा हूं, लेकिन मेरे संदर्भ में एक CodePackageActivationContext नहीं है। मैं अपनी स्टेटलेस सेवाओं में देखता हूं कि यह कंस्ट्रक्टर पर ओइनकॉम्म कम्युनिकेशन लिस्टनर को मिलती है। लेकिन मुझे यकीन नहीं है कि इसे अभिनेता में कहां मिलेगा?
स्टीव

7
समय से पहले पूछा। यहाँ टिप्पणियाँ: azure.microsoft.com/en-us/documentation/articles/… इस का उपयोग करने के लिए बिंदु: CodePackageActivationContext सक्रियणकैंटेक्स्ट = FabricRuntime.GetActivationContextxt ();
स्टीव

11
यह वास्तविक प्रलेखन से बहुत बेहतर है, धन्यवाद! यह भी सहमत है कि यह बहुत जटिल है ... इस एसएफ टीम को ठीक करें!
naspinski

2
मुझे एक समस्या मिल रही थी जहाँ ये सेटिंग्स ओवरराइड नहीं हो रही थीं। आपको ऊपर ServiceManifestImport(बच्चे का ApplicationManifest) मापदंडों को परिभाषित करना होगा, लेकिन ConfigOverridesइसमें (बच्चे का ServiceManifestImport) जाना होगा।
मर्डोक्स

42

आप किसी अन्य एप्लिकेशन की तरह ही पर्यावरण चर का उपयोग कर सकते हैं , यह सेवा के कपड़े के भीतर अतिथि निष्पादन के साथ भी काम करता है , settings.xmlक्योंकि इसके लिए अंतर्निहित सर्विस फैब्रिक रनटाइम की आवश्यकता होती है।

अपने आवेदन के भीतर आप पर्यावरण चर को किसी अन्य .net अनुप्रयोग की तरह एक्सेस कर सकते हैं, हालांकि कक्षा में GetEnvironmentVariableविधि Environment:

var baseUri = Environment.GetEnvironmentVariable("SuperWebServiceBaseUri");

फिर हमें कुछ डिफ़ॉल्ट पर्यावरण चर मूल्यों को सेटअप करने की आवश्यकता है, यह ServiceManifest.xmlसेवा की घोषणा फ़ाइल के भीतर किया जाता है ।

<?xml version="1.0" encoding="utf-8" ?>
<ServiceManifest Name="MyServicePkg" Version="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!-- snip -->
    <CodePackage Name="Code" Version="1.0.0">
        <!-- snip -->
        <EnvironmentVariables>
            <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="http://localhost:12345"/>
        </EnvironmentVariables>
    </CodePackage>
    <!-- snip -->
</ServiceManifest>

फिर ApplicationManifest.xmlनिम्न कोड का उपयोग करके इन पर्यावरण चर को फ़ाइल के भीतर ओवरराइड किया जा सकता है :

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="ChileTargetType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <!-- snip -->
    </Parameters>
    <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
        <EnvironmentOverrides CodePackageRef="Code">
            <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="https://the-real-live-super-base-uri.com/"/>
        </EnvironmentOverrides>
    </ServiceManifestImport>
    <!-- snip -->
</ApplicationManifest>

यह तो का उपयोग कर किसी अन्य अनुप्रयोग प्रकट सेटिंग की तरह parameterised किया जा सकता है local.xmlऔर cloud.xml

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/AppFabricName.ServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="MyService_SuperWebServiceBaseUri" Value="https://another-base-uri.com/" />
    </Parameters>
</Application>

फिर हमें ApplicationManifest.xmlइन मापदंडों का समर्थन करने के लिए अद्यतन करना होगा ;

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="ChileTargetType" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    <Parameters>
        <Parameter Name="MyService_SuperWebServiceBaseUri" DefaultValue="https://the-real-live-super-base-uri.com/" />
    </Parameters>
    <ServiceManifestImport>
        <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
        <EnvironmentOverrides CodePackageRef="Code">
            <EnvironmentVariable Name="SuperWebServiceBaseUri" Value="[MyService_SuperWebServiceBaseUri]"/>
        </EnvironmentOverrides>
    </ServiceManifestImport>
    <!-- snip -->
</ApplicationManifest>

2
पर्यावरण चर सेट करने के लिए और अधिक साफ तरीका
5:00 बजे भूख लगी

2
इस लिंक से मुझे भी मदद मिली: Binaryradix.com/2016/10/…-
डारेल के।

7

उपरोक्त उत्तर अच्छी तरह से समझाते हैं कि यह कैसे किया जाता है। मैं एक साइडमार्क जोड़ना चाहता हूं, ऐसा क्यों है कि ' दृढ़ '

यह इस तरह से होना है, क्योंकि सेवाओं का उद्देश्य आत्म-निहित होना है। उन्हें किसी भी एप्लिकेशन में डिफ़ॉल्ट रूप से चलना चाहिए जिसे वे लिंक किए गए हैं। आवेदन की घोषणा के स्वतंत्र। तो सेवा केवल मापदंडों पर भरोसा कर सकती है, जो कम से कम अपने स्वयं के कॉन्फ़िगरेशन में पूर्वनिर्धारित हैं।

ये पर्चे फिर आवेदन द्वारा अधिलेखित किए जा सकते हैं। यह एकमात्र सार्वभौमिक दृष्टिकोण है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.