Azure Service Fabric - Tutorial 17 - Data Packages, Config and Environment Variables

jumpstartCS
22 Mar 202016:39

Summary

TLDRThis video tutorial delves into using data packages, config packages, and environment variables in Service Fabric. It demonstrates how to package and deploy various file types, such as JSON, XML, and CSV, with a Service Fabric deployment. The video also covers registering data packages in the service manifest, accessing data within the service, and using configuration to adapt settings based on deployment scenarios. Additionally, it explains the process of setting environment variables and accessing them within the application code for different types of services in Service Fabric.

Takeaways

  • ๐Ÿ“ฆ Data packages in Service Fabric allow for packaging files like JSON, XML, CSV as part of the deployment.
  • ๐Ÿ“‚ To include a data file, create a 'data' folder in the service package route and add the file there.
  • ๐Ÿ”„ Change the file's properties to 'Copy to Output Directory if newer' to ensure it's included in the deployment.
  • ๐ŸŒ Register the data package in the service manifest with a name and version number.
  • ๐Ÿ” Access the data file in the service by using the `this.ActorService.Context.CodePackageActivationContext.GetDataPackageObject` method.
  • ๐Ÿ“‹ Configuration packages enable different settings based on deployment, using application parameters files.
  • ๐Ÿ”ง Add configuration values to the application parameters files and register them in the application manifest.
  • ๐Ÿ”„ Use configuration overrides in the service manifest import to set different values for different environments.
  • ๐ŸŽฏ Access configuration values in the service code via the `this.ActorService.Context.CodePackageActivationContext.GetConfigurationPackageObject` method.
  • ๐Ÿ—๏ธ Environment variables can be set in the application manifest's service manifest import section for service-specific settings.
  • ๐Ÿ”‘ Use environment variables in the service by accessing them with `Environment.GetEnvironmentVariable` in C#.
  • ๐Ÿ”„ Actor services and stateful/stateless services differ slightly in how they access configuration and data files, but the process is largely the same.

Q & A

  • What are the three main components of Service Fabric services?

    -The three main components of Service Fabric services are code, configuration, and data.

  • How do data packages work in Service Fabric?

    -Data packages in Service Fabric allow you to package up a file, such as JSON, XML, or CSV, as part of your deployment. They are added to the service and registered in the service manifest with a version number.

  • How can you add a data file to a Service Fabric service?

    -To add a data file, you create a 'data' folder in the service package route, add the data file there, set the 'Copy to Output Directory' property to 'Copy if newer', and then register the data package in the service manifest with a name and version.

  • How do you access data files within a Service Fabric actor service?

    -In the actor service class, you can access the data file by using the `this.ActorService.Context.CodePackageActivationContext.GetDataPackageObject` method, specifying the name of the data package, and then combining the data package path with the file name to read the contents.

  • What is the purpose of configuration in Service Fabric services?

    -Configuration in Service Fabric services allows you to set different values for parameters based on the deployment environment, enabling flexible and adaptable service behavior across different cluster configurations.

  • How do you set up different configurations for different deployment environments?

    -You can set up different configurations by adding parameters in the application parameters files for each environment, such as 'Local.OneNode' and 'Local.FiveNode', and then referencing these parameters in the application and service manifests.

  • How do you override configuration settings for a specific service in Service Fabric?

    -You override configuration settings by adding a 'Config Overrides' section in the service manifest import for the specific service, defining the settings and parameters that should be used for that service.

  • What are environment variables in the context of Service Fabric applications?

    -Environment variables in Service Fabric applications provide a way to configure services with external settings that can be changed without modifying the application code, allowing for็ตๆดป็š„้…็ฝฎ็ฎก็†.

  • How do you add environment variables to a Service Fabric service?

    -You add environment variables by defining them in the 'EnvironmentOverrides' section of the service manifest import in the application manifest, and then referencing them in the service manifest under the 'EnvironmentVariables' section for the specific service.

  • How can you access environment variables within a Service Fabric actor service?

    -You can access environment variables in an actor service by using the `Environment.GetEnvironmentVariable` method, providing the name of the environment variable as a string.

  • What is the difference between accessing configuration and data files in actor services versus stateful and stateless services?

    -The main difference is that in actor services, you access configuration and data files through the `this.ActorService.Context` object, whereas in stateful and stateless services, you use the `this.Context` object from the service's context.

  • How can you verify that your Service Fabric service is correctly accessing configuration and environment variables?

    -You can verify access by deploying the service in different configurations, triggering calls to the service's APIs, and observing the output for the configuration and environment variable values, ensuring they match the expected settings for the given environment.

Outlines

00:00

๐Ÿ“ฆ Understanding Data Packages in Service Fabric

This paragraph introduces the concept of data packages in Service Fabric, explaining how they allow for the inclusion of files like JSON, XML, or CSV as part of a service deployment. It details the process of adding a data file to a service, such as creating a 'data' folder within the service package route and placing the data file there. The video also covers how to set the 'Copy to Output Directory' property for the file, register the data package in the service manifest, and access the data within the service using the `this.ActorService.Context.CodePackageActivationContext.GetDataPackageObject` method. The example used is a CSV file named 'test.csv' with sample data, and it demonstrates how to read the contents of the file within the service.

05:01

๐Ÿ”ง Configuring Services with Configuration Packages

The second paragraph delves into the use of configuration packages in Service Fabric, which allow for different configurations based on deployment scenarios. It explains how to add parameters to application parameters files for different environments (e.g., local one-node vs. local five-node) and how to use these parameters within the service. The process involves adding the parameter to the application manifest, creating a config override in the service manifest import, and accessing the parameter value in the service code. The example given involves adding a 'DB config' parameter that can have different values depending on whether the service is deployed in a one-node or five-node cluster.

10:01

๐Ÿ”„ Accessing Configuration Settings at Runtime

This section focuses on accessing configuration settings at runtime within an actor service. It explains how to retrieve configuration settings using the `this.ActorService.Context.CodePackageActivationContext.GetConfigurationPackageObject` method and how to access specific settings and sections. The example demonstrates retrieving a 'DB config' parameter value that was set differently for one-node and five-node configurations. The video also clarifies how to access the same configuration settings in stateful and stateless services compared to actor services.

15:03

๐ŸŒ Utilizing Environment Variables in Service Fabric Applications

The final paragraph discusses the use of environment variables in Service Fabric applications. It outlines the process of adding environment variable overrides in the application manifest and service manifest import sections. The example adds an environment variable named 'DB port' with a sample port value. The video then shows how to access this environment variable in the service code using the `Environment.GetEnvironmentVariable` method and emphasizes the importance of using the correct environment variable name and case sensitivity. It concludes with a brief mention of the difference in accessing environment variables between actor, stateful, and stateless services.

Mindmap

Keywords

๐Ÿ’กService Fabric

Service Fabric is a distributed systems platform for building and deploying microservices, which is the main focus of the video. It provides a framework for deploying and managing scalable and reliable services. In the context of the video, Service Fabric is used to package and deploy data, configuration, and environment variables for an application.

๐Ÿ’กData Packages

Data packages in Service Fabric allow developers to include files, such as JSON, XML, or CSV, as part of the service deployment. These packages are essential for including static data that the service might need. In the video, the creator demonstrates how to add a CSV file as a data package to a Service Fabric service.

๐Ÿ’กConfiguration

Configuration in Service Fabric refers to the settings and parameters that can be changed for a service without requiring a code change. This allows for flexibility in how the service operates based on the deployment environment. The video explains how to use configuration files to set different values for a 'DB config' parameter based on whether the service is deployed in a one-node or a five-node cluster.

๐Ÿ’กEnvironment Variables

Environment variables are values that can be set outside of the application code and can influence the behavior of an application. In Service Fabric, they can be defined in the application manifest and used within the service code to adapt to different deployment scenarios. The video demonstrates adding an environment variable 'DB port' and accessing it within the service code.

๐Ÿ’กActor Service

Actor service is a concept in Service Fabric based on the Actor model, which encapsulates state and behavior within objects called actors. Each actor has a unique identifier and communicates with other actors through messages. The video uses the actor service as an example to demonstrate how to access data, configuration, and environment variables.

๐Ÿ’กService Manifest

The service manifest is an XML file that describes the service in Service Fabric, including its code, configuration, and data packages. It is used to register the service and its components with the fabric. The video explains how to add data packages and configuration parameters to the service manifest.

๐Ÿ’กCode Package Activation Context

The code package activation context is an object in Service Fabric that provides access to the runtime environment of a service's code package. It is used to interact with the fabric and retrieve information such as the path to data or configuration packages. The video demonstrates using the activation context to access a data file's contents.

๐Ÿ’กConfiguration Package Object

The configuration package object in Service Fabric is used to retrieve configuration settings from the service's configuration package. It allows services to access configuration data at runtime, which can be different based on the deployment environment. The video shows how to obtain this object and use it to access a 'DB config' parameter.

๐Ÿ’กEnvironment Overrides

Environment overrides in Service Fabric allow developers to define different settings for different environments, such as development, testing, or production. These overrides are applied to the service's environment variables, allowing for็ตๆดป configuration changes without altering the code. The video explains how to add an environment variable 'DB port' and reference it in the service.

๐Ÿ’กApplication Parameters

Application parameters in Service Fabric are used to set values for parameters defined in the application manifest. These parameters can be different for each deployment environment and are used to configure the application based on the environment it is running in. The video discusses adding 'DB config' parameters to different environment files like 'Local.OneNode' and 'Local.FiveNode'.

๐Ÿ’กPackage Root

The package root in Service Fabric refers to the directory where the application package is located. This is important as it is the base directory from which the fabric deploys and runs services. The video mentions the package root in the context of adding data and configuration packages to the service.

Highlights

Introduction to using data packages, config packages, and environment variables in Service Fabric.

Data packages allow for packaging files like JSON, XML, CSV as part of the Service Fabric deployment.

Service Fabric services consist of three main components: code, configuration, and data.

Adding a data file to a service involves creating a 'data' folder in the package route and adding the file there.

To use a data file in a service, it must be registered in the service manifest with a version number.

Accessing data in the service is done through the 'this.ActorService.Context' and 'CodePackageActivationContext' in the actor service class.

Configuration allows for different settings based on deployment, using application parameters files.

Configuration values are added in the application manifest and can be overridden in the service manifest import.

Environment variables can be set in the application manifest for different deployment scenarios.

Environment variables are accessed in the service using 'Environment.ExpandEnvironmentVariables'.

The video provides a step-by-step tutorial on adding and using data packages, config packages, and environment variables in Service Fabric.

Demonstration of deploying a service with a data package and accessing its contents in the 'UnactivatedAsync' method.

Explanation of how to configure different database connection settings for one-node and five-node clusters using config packages.

Illustration of changing cluster configuration and observing the dynamic update in configuration values.

Discussion on the slight difference in accessing configuration and data files between actor, stateful, and stateless services.

The video concludes with a summary and a call to action for viewers to like and subscribe for more content.

Transcripts

play00:00

hi guys so welcome back to another video

play00:01

on service fabric in this video we're

play00:04

gonna start to look at data packages

play00:07

config packages and environment

play00:09

variables and how we can use these in

play00:12

service fabric so the first thing we

play00:13

look at is data packages and data

play00:16

packages allow us to package up a file

play00:19

as part of our service fabric deployment

play00:21

so this could be a JSON XML CSV file

play00:25

whatever we want and as we remember all

play00:27

service fabric services have three main

play00:29

components they have code which we've

play00:31

mostly looked at so far configuration

play00:34

which we'll look at in this video and

play00:36

data which we'll look at now in order to

play00:38

add a data file to our service we simply

play00:41

go to our service and open the package

play00:43

route we can add a new folder here calls

play00:46

data and inside this data folder is

play00:51

where we're gonna add our data files so

play00:54

we might want to add a file called test

play00:57

and it's a CSV file so test dot CSV and

play01:02

inside that file we will just have some

play01:05

random CSV data or random tape tabular

play01:08

data which I'll fill out now so we

play01:10

filled out the test CSV file here with

play01:13

just a couple of columns so we can see

play01:15

we've got the title column ID name age

play01:18

and then four rows of data and this

play01:21

could be a much much bigger file in a

play01:24

real system so the first thing we need

play01:26

to do is need to right-click on the file

play01:27

here in the solution Explorer and go to

play01:30

properties and then change copy to April

play01:33

directiy to copy if newer and then save

play01:37

so next we can go back to our product

play01:40

actor service we'll be using the actor

play01:42

for this tutorial but the concepts are

play01:45

pretty much identical with stateful

play01:48

services I'll just show the one

play01:50

different detail in a few minutes so we

play01:53

also need to register the data package

play01:56

we've added in our service manifest for

play01:59

the service that we are using the data

play02:00

package in so if we open the service

play02:03

manifest dot XML for our product actor

play02:07

service we add the data package right

play02:10

underneath the config package here so

play02:13

you want to

play02:14

a data package we want to call it data

play02:19

how do we need to give their version

play02:20

number as well so we'll just give it a

play02:22

version 1.0.0 and that will allow us to

play02:28

add this data package into our actor

play02:31

service and then you access the data in

play02:34

our actor service we can go back to the

play02:36

product actor service class which is the

play02:39

base class for our actor and in any of

play02:42

the methods we can access the data so

play02:44

we'll do it in unactivated async for now

play02:47

we simply need to say this actor service

play02:51

context and then we want to call code

play02:54

package activation context and get data

play02:58

package object and then we give the name

play03:02

of the data package so data and our

play03:06

semicolon and then we can save this in

play03:10

the variable called data package so as

play03:17

you can see this is a type of system a

play03:19

fabric data package and then we want to

play03:23

get the path from the data package and

play03:24

combine it with the name of our CSV file

play03:28

so our data path will be path dot

play03:35

combined to combine both the data

play03:37

package path and the name of the file so

play03:40

to do this we just simply type data

play03:42

package and Darth path and the name of

play03:45

our file that we added is test csv if

play03:50

the file was called something different

play03:51

this is where we change the name of the

play03:53

file and finally we want to read out of

play03:55

the contents from this path and use it

play03:57

in our service so we can add another

play03:59

variable called contents and we have

play04:03

that equal to file dot read alt text and

play04:10

we simply pass it the path so in this

play04:12

case it's the data path here and this

play04:16

should give us a string object which

play04:17

contains the contents of the file we're

play04:19

looking to use so we'll quickly run our

play04:22

service deploy it and runners will call

play04:25

any method on the actor we should

play04:27

on activate a sink and we'll see what we

play04:30

get in the contents of our file okay so

play04:34

our service is deployed now and we're

play04:36

gonna trigger a call to on activate a

play04:38

sink using postman so we can see we hit

play04:43

our API endpoint and we jump into on

play04:48

activate a sink so we see we have a

play04:50

reference that data package object here

play04:52

and to the data path which is C service

play04:56

fabric dev cluster and what note the

play04:58

data is stored on and then we're able to

play05:00

access the contents of the file here so

play05:02

we can then parse the contents of this

play05:04

file and use it however we want in our

play05:06

service so the next thing we'll look at

play05:09

is configuration so in our service we

play05:12

might want to have a different

play05:14

configuration based on our deployment so

play05:16

we might want to look in our application

play05:19

parameters file we see that we have a

play05:20

local one node file and we have a local

play05:23

5 node file we might want to set some

play05:26

values different depending on how we're

play05:27

deployed so to do this we can simply add

play05:30

a parameter in any of these files in the

play05:33

application parameters folder so for

play05:35

instance in the local 5 node XML filing

play05:37

on add a parameter and it's gonna be

play05:39

called DB config and we'll simply set

play05:45

its value to be called 5 node I will do

play05:50

something very similar in one node we'll

play05:53

call DB come fake except we'll change

play05:57

the value to one node so this means we

play06:00

can use a different value for a DB

play06:02

config when we're running in a 5 node as

play06:04

opposed to a one node cluster it's

play06:06

important that we keep the name the same

play06:08

so we can access it no matter how we're

play06:11

deployed so once we've added the

play06:13

configuration value in our application

play06:16

parameters files we need to go to the

play06:18

application package root and the

play06:20

application manifest and then we need to

play06:22

add it here at the top in the parameter

play06:25

section one more time and in this case

play06:27

we're giving it a default value or you

play06:29

can leave this blank if we don't want to

play06:31

have a default value so the name as we

play06:34

had is called

play06:35

DB config in this case we won't give it

play06:38

a default value we'll leave that blank

play06:41

so the final thing we need to do in this

play06:43

file is we need to add this new

play06:45

parameter in a config section in our

play06:48

service manifest import for whatever

play06:50

service we want to use the parameter in

play06:52

we can use the parameter in multiple

play06:54

services if we want but we have to

play06:56

ensure we add the correct configuration

play06:57

for each service so I'll just delete

play07:00

these comments and split it and a bit so

play07:02

it's a bit easier to see we can see we

play07:04

have two service manifest imports we

play07:07

have one for the API service and one for

play07:09

the actor service the actor service is

play07:11

the one that we're gonna add this DB

play07:13

config config parameter to so we do that

play07:16

right order the service manifest ref and

play07:18

we add a new section called config

play07:21

overwrites inside that we have a config

play07:26

override which we give a name and

play07:29

usually the convention is to call this

play07:31

one config and inside our config we can

play07:36

set certain settings and we have a

play07:40

section which we give a default name say

play07:45

we might call the section database and

play07:50

inside the section is finally where we

play07:53

can add our parameter so we'll give it

play07:57

the same name as above DB config

play07:59

although this isn't required to have the

play08:01

exact same name in this instance and we

play08:03

give it the value so the value we want

play08:06

to give it needs to be in square

play08:09

brackets like this and needs to be the

play08:10

same name as the parameter here so that

play08:12

means it's reading in the value from the

play08:15

application parameters files so here

play08:19

we've created a config override called

play08:21

config we have a section inside the

play08:23

settings called database and inside that

play08:25

section we have a parameter called DB

play08:27

config and we can have multiple

play08:29

parameters in a single section and we'll

play08:32

just change this section name to be

play08:33

uppercase to be inline with conventions

play08:35

so the last thing we need to do to

play08:38

configure our service to use this Sun

play08:40

fig is we need to go to the service in

play08:42

question which is our product actor

play08:44

service we need to go into the package

play08:46

roof and we need to open config and

play08:48

settings and here we need to add another

play08:50

section using the names used here so in

play08:54

the settings file

play08:54

we can see we have several sections

play08:56

already to find we need to add another

play08:58

section here underneath so we'll have

play09:03

the section the section needs a name in

play09:05

this case the name should be the exact

play09:08

same as the section that we've given it

play09:10

in the application manifest simply

play09:13

database and then we can add a parameter

play09:16

here so the parameter also has a name

play09:19

and again the name should be the exact

play09:22

same as the name of the parameter in the

play09:24

application manifest and the value is

play09:29

left blank which means it will be read

play09:31

in again from the application manifest

play09:33

which in turn is reading it in from the

play09:35

application parameters files so then we

play09:38

have to access this value in our code so

play09:42

again we can jump into the actor service

play09:44

for simplicity we'll do it in the on

play09:48

activate async for now we'll just

play09:50

comment out the data package code so

play09:53

again we start this off the same way we

play09:55

call this actor service dot context then

play10:01

we want to get the code package

play10:02

activation context and in this case we

play10:05

want to call get configuration package

play10:07

object we need to pass this a screen

play10:12

called a package name remember in our

play10:14

application manifest we gave the package

play10:16

name the name config so we put that in

play10:19

our configuration package object and

play10:22

then we want to call dot settings and

play10:26

sections and then we need to pass in our

play10:28

section name which again in the

play10:30

application manifest we called database

play10:33

and finally what parameter we want so

play10:37

parameters can is a dictionary so we

play10:39

need to pass it in the key and the key

play10:42

is the name of our parameter in this

play10:45

case DB config and then to get the value

play10:53

we can simply call dot value and we can

play10:56

save that to a variable called DB config

play11:02

which is a screen so when we run this

play11:05

service and deploy it in a one node

play11:07

configuration we should get the value

play11:09

one note here if you deploy it in five

play11:11

no config we should get the value five

play11:13

node so let's boot up the service in one

play11:16

node config and see what we get so our

play11:18

service is deployed now

play11:20

so let's trigger a call to activate a

play11:23

sync or any extra method which will

play11:25

trigger a call to on activate a sync and

play11:27

see what comes out in this DB config

play11:30

value so we'll just call one of the API

play11:33

endpoints again which should proxy to

play11:36

our actor and we can see we jump into

play11:40

all activate async and let's continue on

play11:43

here and see what we get for DB config

play11:46

as expected we get one node so we'll

play11:49

change our cluster configuration to be

play11:50

in the five node configuration just to

play11:53

see that we get the DB config changed to

play11:56

five node so we'll just redeploy our

play11:59

cluster now and we'll jump back in when

play12:01

we get that set up

play12:02

okay so we've redeployed on a five node

play12:05

configuration and we'll hit the API

play12:07

endpoint again and see what we get for

play12:10

the value of DB config this time so

play12:14

we'll hit the API endpoint which will

play12:16

proxy to our actor service we'll try get

play12:19

the DB config from the config section

play12:22

and as expected their value for DB

play12:25

config in a five node configuration is

play12:27

five node so the final thing I'm going

play12:29

to talk about in this video is

play12:30

environment variables in service fabric

play12:33

so just to clean everything up we'll

play12:35

just close all of our documents for now

play12:37

just so we have a clear workspace and

play12:39

we'll see how we can add environment

play12:42

variable in our service fabric

play12:43

application so we want to again open our

play12:46

application manifest and the place where

play12:49

we add environment overrides is in our

play12:52

service manifest import section in our

play12:54

application manifest so we can see we

play12:57

have two service manifest imports we

play13:00

have one for the API service which by

play13:02

default actually already has an

play13:04

environment override and one for hour

play13:07

after hour in vironment overrides so we

play13:12

want to add a section here in our second

play13:15

sir

play13:15

Manifest import for environment

play13:16

overrides so we can just copied that in

play13:19

from our section above and we don't want

play13:23

to have the environment name asp.net

play13:25

core environment instead we'll call it

play13:27

something different to say DB port and a

play13:32

value of just say a random port like a

play13:35

peasant and we can see here we have the

play13:37

environment overrides and we have to

play13:39

define the code package reference and we

play13:41

have an equal to code with a lowercase C

play13:43

this I think relates to the service

play13:47

manifest so if we look in the service

play13:49

manifest for the actor service remember

play13:51

that this is the section for the actor

play13:52

service we can see that we have a code

play13:56

package called code with an uppercase so

play13:58

I think in the application manifest in

play14:01

our environment override section this

play14:03

has to be a lowercase version of what we

play14:05

have in our code package here so

play14:08

speaking of the service manifest we also

play14:11

have to add some configuration for our

play14:13

environment variable here so we can add

play14:15

environment variables in our service

play14:18

manifest so we have a section right

play14:21

under the entry point for environment

play14:22

variables and then we just want to add

play14:24

the environment variable that we just

play14:26

added in our application manifest into

play14:28

our service and the name has to be the

play14:32

same so we'll cover that as DB port and

play14:35

the value can be just blank because we

play14:39

want to use the value from our

play14:40

application manifest so the final step

play14:43

is we want to actually use this

play14:45

environment variable inside our

play14:47

application so we can open up our

play14:49

product actor service again and we'll go

play14:52

down to the on activate async just

play14:56

comment at this DB config section and we

play14:59

want to access our environment variable

play15:00

which we call DB ports so I set a

play15:02

variable equal to DB board and we'll

play15:06

access this just like any order

play15:08

environment variable that we access in

play15:09

c-sharp so we'll just say environment

play15:16

yeah environment variable and we'll give

play15:19

it the name DB port

play15:25

just double-check that that is what we

play15:28

expect with a lowercase B here so we'll

play15:30

just put that in so we'll run our

play15:32

service again and we'll just see can we

play15:34

access this DB port here and remember

play15:36

this is imported as a string so if it

play15:38

was in numeric value we'd have to cast

play15:40

it I'll just deploy and we'll come back

play15:42

and we'll call a method on our actor to

play15:45

see if we can get this DV port from our

play15:47

environment variable okay so our service

play15:50

has started now so we're just gonna

play15:52

again hit the API endpoint to trigger

play15:54

and proxy to our actor service so we've

play15:57

hit the endpoint little proxy director

play15:59

service will call the on activate async

play16:03

and we can see we have accessed the DB

play16:05

port 8000 so the last quick thing I want

play16:09

to mention before wrapping up the video

play16:10

is that this was obviously for actor

play16:13

services so we called this dot actor

play16:15

service the only difference between

play16:17

accessing in config and data files in

play16:19

actor services and in stateful and

play16:22

stateless services is that we call this

play16:24

dot actor service in actor services put

play16:28

in order services we simply just need to

play16:29

call this dot context and everything

play16:31

else should be the exact same so thanks

play16:33

for watching this video guys if you

play16:35

enjoyed it please give it a thumbs up

play16:37

and subscribe to the channel

Rate This
โ˜…
โ˜…
โ˜…
โ˜…
โ˜…

5.0 / 5 (0 votes)

Related Tags
ServiceFabricDataPackagesConfigPackagesEnvironmentVariablesDeploymentConfigurationActorServiceStatefulServicesDevelopmentMicrosoftAzure