Device telemetry implementation in .NET for PCS
Clone or download

DEPRECATED: This repository is no longer maintained. It has been moved to a new location. Please visit our new repository here. This microservice is present under services sub-module.

Build Issues Gitter

Device Telemetry Overview

This service provides a RESTful endpoint for read access to device telemetry, full CRUD for rules, and read/write for alarms from storage.


This microservice was built as part of the Azure IoT Remote Monitoring project to provide a generic implementation for an end-to-end IoT solution. More information here.


  • Gets a list of telemetry messages
  • Gets a list of alarms
  • Gets a single alarm
  • Modifies alarm status
  • Create/Read/Update/Delete Rules


  • View the API documentation in the Wiki.

How to use

Running the service with Docker

You can run the microservice and its dependencies using Docker with the instructions here.

Running the service locally


1. Deploy Azure Services

This service has a dependency on the following Azure resources. Follow the instructions for Deploy the Azure services.

  • Cosmos DB

2. Setup Dependencies

This service depends on the following repository.

  1. Storage Adapter Microservice

3. Environment variables required to run the service

In order to run the service, some environment variables need to be created at least once. See specific instructions for IDE or command line setup below for more information. More information on environment variables here.

  • PCS_TELEMETRY_DOCUMENTDB_CONNSTRING = {your Azure Cosmos DB connection string}
  • PCS_STORAGEADAPTER_WEBSERVICE_URL = http://localhost:9022/v1

Running the service with Visual Studio or VS Code

  1. Make sure the Prerequisites are set up.
  2. Install .NET Core 2.x
  3. Install any recent edition of Visual Studio (Windows/MacOS) or Visual Studio Code (Windows/MacOS/Linux).
  4. Open the solution in Visual Studio or VS Code.
  5. Define the following environment variables. See Configuration and Environment variables for detailed information for setting these for your enviroment.
    1. PCS_TELEMETRY_DOCUMENTDB_CONNSTRING = {your Azure Document Db connection string}
    2. PCS_STORAGEADAPTER_WEBSERVICE_URL = http://localhost:9022/v1
    3. etc...
  6. Start the WebService project (e.g. press F5).
  7. Using an HTTP client like Postman, use the RESTful API to test out the service.

Running the service from the command line

  1. Make sure the Prerequisites are set up.
  2. Set the following environment variables in your system. More information on environment variables here.
    1. PCS_TELEMETRY_DOCUMENTDB_CONNSTRING = {your Azure Cosmos DB connection string}
    2. PCS_STORAGEADAPTER_WEBSERVICE_URL = http://localhost:9022/v1
  3. Use the scripts in the scripts folder for many frequent tasks:
    • build: compile all the projects and run the tests.
    • compile: compile all the projects.
    • run: compile the projects and run the service. This will prompt for elevated privileges in Windows to run the web service.

Project Structure

This microservice contains the following projects:

  • WebService.csproj - C# web service exposing REST interface for managing Ruels, Alarms, and Messages
  • WebService.Test.csproj - Unit tests for web services functionality
  • Services.csproj - C# assembly containining business logic for interacting with storage and the Storage Adapter microservice
  • Services.Test.csproj - Unit tests for services functionality
  • Solution/scripts - Contains build scripts, docker container creation scripts, and scripts for running the microservice from the command line

Updating the Docker image

The scripts folder includes a docker subfolder with the files required to package the service into a Docker image:

  • Dockerfile: docker images specifications
  • build: build a Docker container and store the image in the local registry
  • run: run the Docker container from the image stored in the local registry
  • content: a folder with files copied into the image, including the entry point script

Configuration and Environment variables

The service configuration is accessed via ASP.NET Core configuration adapters, and stored in appsettings.ini. The INI format allows to store values in a readable format, with comments.

The configuration also supports references to environment variables, e.g. to import credentials and network details. Environment variables are not mandatory though, you can for example edit appsettings.ini and write credentials directly in the file. Just be careful not sharing the changes, e.g. sending a Pull Request or checking in the changes in git.

The configuration file in the repository references some environment variables that need to be defined. Depending on the OS and the IDE used, there are several ways to manage environment variables.

  1. If you're using Visual Studio (Windows/MacOS), the environment variables are loaded from the project settings. Right click on WebService, and select Options/Properties, and find the section with the list of env vars. See WebService/Properties/launchSettings.json.
  2. Visual Studio Code (Windows/MacOS/Linux) loads the environment variables from .vscode/launch.json
  3. When running the service with Docker or from the command line, the application will inherit environment variables values from the system.

Contributing to the solution

Please follow our contribution guidelines. We love PRs too.


Please enter issues, bugs, or suggestions as GitHub Issues.


Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT License.