Novolis.Transports.Discovery 2026.1.11.85

dotnet add package Novolis.Transports.Discovery --version 2026.1.11.85
                    
NuGet\Install-Package Novolis.Transports.Discovery -Version 2026.1.11.85
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Novolis.Transports.Discovery" Version="2026.1.11.85" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Novolis.Transports.Discovery" Version="2026.1.11.85" />
                    
Directory.Packages.props
<PackageReference Include="Novolis.Transports.Discovery" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Novolis.Transports.Discovery --version 2026.1.11.85
                    
#r "nuget: Novolis.Transports.Discovery, 2026.1.11.85"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Novolis.Transports.Discovery@2026.1.11.85
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Novolis.Transports.Discovery&version=2026.1.11.85
                    
Install as a Cake Addin
#tool nuget:?package=Novolis.Transports.Discovery&version=2026.1.11.85
                    
Install as a Cake Tool

Novolis.Transports.Discovery

Cohort-aware service discovery for local and routed networks. The package provides:

  • UDP probe and beacon helpers for zero-configuration LAN discovery.
  • DNS SRV/TXT resolution for services published by managed DNS or Tailscale DNS.
  • An HTTP(S) lease-registry client for routed networks and coordinated environments.
  • A thread-safe ServiceDiscoveryMap that merges results from any source.

Install

<PackageReference Include="Novolis.Transports.Discovery" Version="2026.1.*" />

Quick start

Create a query and resolve the matching service registrations:

Every registration has a cohort, serviceName, and instanceId. A caller can merge multiple sources without making the product protocol part of this package:

using Novolis.Transports.Discovery;

var query = new ServiceDiscoveryQuery("reach", "host");
var map = new ServiceDiscoveryMap();

var dns = new DnsSrvServiceDiscovery(
    new DnsSrvServiceDiscoveryOptions("example.internal"));
var services = await dns.DiscoverAsync(query, cancellationToken);

map.Replace(services);
var hosts = map.Find(query);

ServiceDiscoveryMap is deliberately a snapshot map. Use RefreshAsync for a one-shot concurrent query of multiple sources, then refresh periodically, subscribe to a registry stream, or combine DNS with another source as needed.

DNS SRV/TXT

For the query above, the resolver asks for:

_host._tcp.reach.example.internal

Each SRV record becomes one service instance. TXT values at the same name use key=value syntax and become instance metadata:

_host._tcp.reach.example.internal. 60 IN SRV 0 0 19800 host-a.example.internal.
_host._tcp.reach.example.internal. 60 IN TXT "hostName=host-a" "protocolVersion=1.0"

DNS publishing is intentionally left to the network's DNS or service advertisement system. The resolver works with ordinary DNS servers and does not require a product-specific coordinator.

HTTP(S) lease registry

HttpServiceRegistry uses an intentionally small REST contract:

Method Path Purpose
PUT /v1/registrations/{cohort}/{service}/{instance} create or renew a lease
DELETE same registration path remove a lease
GET /v1/services?cohort=...&serviceName=... list live registrations

The PUT body contains the registration plus leaseDurationSeconds. The registry removes entries after the lease expires, so a stopped process does not remain in the cohort map indefinitely.

using var http = new HttpClient
{
    BaseAddress = new Uri("https://registry.example.internal/"),
};
var registry = new HttpServiceRegistry(
    http,
    http.BaseAddress);

var registration = new ServiceRegistration(
    "reach",
    "host",
    Environment.MachineName,
    new[] { new ServiceEndpoint(new Uri("tcp://10.0.0.25:19800")) },
    new Dictionary<string, string>
    {
        ["hostName"] = Environment.MachineName,
        ["protocolVersion"] = "1.0",
    });

var session = new ServiceRegistrationSession(
    registry,
    registration,
    leaseDuration: TimeSpan.FromSeconds(30),
    renewalPeriod: TimeSpan.FromSeconds(10));
await session.RunAsync(cancellationToken);

Configure authentication and certificate validation on the supplied HttpClient; the library does not embed credentials.

UDP compatibility

Use DiscoveryScanner for probes and DiscoveryResponder for generic beacon responses. These primitives remain available for products such as Reach that need zero-configuration broadcast discovery on a trusted LAN.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2026.1.11.85 42 10/21/2026
2026.1.11.84 74 10/20/2026
2026.1.11.83 84 10/19/2026
2026.1.11.82 81 10/19/2026
2026.1.11.81 78 10/19/2026
2026.1.11.80 78 10/19/2026
2026.1.11.79 84 10/18/2026
2026.1.11.76 86 10/18/2026
2026.1.11.75 90 10/12/2026
2026.1.11.61 96 10/4/2026
2026.1.1.60 98 10/4/2026
2026.1.1.58 93 10/3/2026
2026.1.1.57 89 10/1/2026
2026.1.1.56 100 9/30/2026