Edit

Share via


How to parameterize configuration files in Service Fabric

This article shows you how to parameterize a configuration file in Service Fabric. If you're not already familiar with the core concepts of managing applications for multiple environments, read Manage applications for multiple environments.

Procedure for parameterizing configuration files

In this example, you override a configuration value using parameters in your application deployment.

  1. Open the <MyService>\PackageRoot\Config\Settings.xml file in your service project.

  2. Set a configuration parameter name and value, for example cache size equal to 25, by adding the following XML:

     <Section Name="MyConfigSection">
       <Parameter Name="CacheSize" Value="25" />
     </Section>
    
  3. Save and close the file.

  4. Open the <MyApplication>\ApplicationPackageRoot\ApplicationManifest.xml file.

  5. In the ApplicationManifest.xml file, declare a parameter and default value in the Parameters element. It's recommended that the parameter name contains the name of the service (for example, "MyService").

     <Parameters>
       <Parameter Name="MyService_CacheSize" DefaultValue="80" />
     </Parameters>
    
  6. In the ServiceManifestImport section of the ApplicationManifest.xml file, add a ConfigOverrides and ConfigOverride element, referencing the configuration package, the section, and the parameter.

     <ConfigOverrides>
       <ConfigOverride Name="Config">
           <Settings>
             <Section Name="MyConfigSection">
                 <Parameter Name="CacheSize" Value="[MyService_CacheSize]" />
             </Section>
           </Settings>
       </ConfigOverride>
     </ConfigOverrides>
    

Note

In the case where you add a ConfigOverride, Service Fabric always chooses the application parameters or the default value specified in the application manifest.

Access parameterized configurations in code

Note

Too many or large overrides can affect API performance.

Instead of using FabricClient.QueryClient.GetApplicationListAsync, fetch parameters using the method described in this section. For clusters with many applications, try using default values to improve performance. The impact of application parameters on performance depends on factors like VM size, the number of parameters, the number of applications, and the length of the values.

You can access the configuration in your settings.xml file programmatically. Take, for example, the following configuration XML file:

<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="MyConfigSection">
		<Parameter Name="MyParameter" Value="Value1" />
	</Section>
</Settings>     

Use the following code to access the parameters:

CodePackageActivationContext context = FabricRuntime.GetActivationContext();
var configSettings = context.GetConfigurationPackageObject("Config").Settings;
var data = configSettings.Sections["MyConfigSection"];
foreach (var parameter in data.Parameters)
{
  ServiceEventSource.Current.ServiceMessage(this.Context, "Working-{0} - {1}", parameter.Name, parameter.Value);
}

Here, Parameter.Name is MyParameter and Parameter.Value is Value1.

Next steps

For information about other app management capabilities that are available in Visual Studio, see Manage your Service Fabric applications in Visual Studio.