Skip to content

About the Domain Services DS logo

The Domain Services is a collection of software components supporting service-oriented architectures (SOA). At the lowest level it is a framework for developing SOA-components. At a higher level it provides a number of data-agnostic stateless services within various common domains such as time series data and -analysis, geospatial data and -analysis, job execution etc. All of the domain services expose a .NET API as well as a Web API (REST/HTTP).

Furthermore, the Domain Services is the center of a larger ecosystem of functionality that also comprises a sophisticated workflow engine and a collection of Polymer Web components.

Why use the Domain Services?

There are many good reasons for using the Domain Services - for example openness, composability and extensibility.

Openness

The Domain Services components are easily accessible (as NuGet packages) for any software developer within DHI – in Solutions as well as in MIKE. As such, Domain Services is a true "Think Group First" initiative with the intention of unleashing the power of MIKE technology for creative usage anywhere. In products as well as in projects and on any platform – Unix, Windows, Web or mobile. Domain Services embraces and supports well-known open standards such as GeoJSON, Web Components, OpenGIS® Web Map Service (WMS) and HTTP.

Composability

The Domain Services is a collection of decoupled software components ("LEGO bricks") that can be used to compose project-specific customized applications. The Domain Services ecosystem is a flexible "self-service" open platform from which you can pick-and-choose whatever you need.

Extensibility

Due to its architecture, Domain Services is highly extensible. It exposes a number of extensibility points to plug in to, so that everybody interested can easily contribute with new extensions.

How do I get it?

The components of Domain Services are deployed as NuGet packages on an internal NuGet feed.

There are several types of components, all following the below NuGet package naming convention:

  • Core: DHI.Services
  • Service components: DHI.Services.<domain>(e.g DHI.Services.TimeSeries)
  • Web API components: DHI.Services.<domain>.Web (e.g DHI.Services.TimeSeries.Web)
  • Provider components: DHI.Services.<technology> (e.g. DHI.Services.MIKECore)

The core and service components of Domain Services are built using .NET Standard 2.0, which makes them true cross-platform components that are able to run on all .NET runtimes supporting .NET Standard - incl. .NET Framework, .NET Core, Mono and Xamarin. The lowest version of the mentioned runtimes supporting .NET Standard 2.0 is shown in the below table.

Runtime Version
.NET Framework >=4.6.1
.NET Core >=2.0
Mono >=5.4

The nuget packages are deployed using semantic versioning.

How do I get started?

For example, to calculate the moving average of some time series values in a dfs0-file, install the DHI.Services.MIKECore nuget package and copy the dfs0-file to the bin folder of your application. Then the following code will do the job:

var timeSeriesRepository = new Dfs0TimeSeriesRepository("TaarbaekRev_Spectral.dfs0");
var timeSeriesService = new TimeSeriesService<string, double>(timeSeriesRepository);
var movingAverage = timeSeriesService.GetValues("Hm0").MovingAverage(10);

For additional information on how to use the .NET-services, see the Cheat Sheet.

For a broader overview of the different ways to utilize the Domain Services, see How to Leverage the Domain Services.

Who uses Domain Services?

The Domain Services is used in numerous projects ranging from smaller research projects to fully fledged operational systems such as NCOS Online.

Additional resources