Skip to content
Document DB 13 - MCP Server, REST API, Field Level Encryption, Transactional Outbox, & More!SHOW ME!!

Network Discovery Releases

Feature
New Shiny.Net.Discovery package — cross-platform mDNS/DNS-SD (Bonjour/Zeroconf) service discovery and publishing. Register with services.AddMdns() and inject IMdnsManager to browse the local link (Browse for a live IAsyncEnumerable<MdnsBrowseResult> stream, BrowseOnce for a fixed-window scan), resolve a known instance to its host/port/addresses/TXT records, and publish your own service with Publish(...). Supported on iOS, Mac Catalyst, macOS, Android, Windows, Linux, and server .NET.
FeatureiOS
Apple platforms are backed by NSNetService (Bonjour) rather than raw multicast sockets, so no com.apple.developer.networking.multicast entitlement is required — only NSLocalNetworkUsageDescription and an NSBonjourServices array listing every service type the app browses for or publishes. Browsing silently returns nothing when a type is missing from that array.
FeatureAndroid
Android is backed by NsdManager, so no CHANGE_WIFI_MULTICAST_STATE permission and no WifiManager.MulticastLock are needed — only INTERNET and ACCESS_NETWORK_STATE in the manifest. Resolution uses registerServiceInfoCallback on API 34+ (concurrent resolves) and falls back to a serialised resolveService below it, because the older API only tolerates one resolve at a time.
FeatureWindows
Windows, Linux, macOS console, and server .NET are served by a dependency-free managed responder speaking mDNS directly on UDP 5353. It implements RFC 6762/6763 name compression, probing with conflict-driven renaming, announcements, goodbye packets, TTL expiry, and query answering across every multicast-capable interface, and rejoins the multicast group when the network changes. SO_REUSEADDR/SO_REUSEPORT let it coexist with avahi-daemon, mDNSResponder, or the Windows DNS client — Avahi is not a dependency on Linux.
Feature
MdnsService exposes InstanceName, ServiceType, Domain, HostName, Port, Addresses (IPv4 and IPv6), TxtRecords, FullName, IsResolved, and GetEndPoint(family?). TXT records are read with GetTxt(key) or the parsing GetTxt&lt;T&gt;(key, fallback) for any IParsable&lt;T&gt;.
Feature
Publishing returns an IMdnsPublication whose InstanceName reflects any conflict-driven rename ("My Service""My Service (2)"), so always read the live name back rather than reusing the requested one. Disposing the handle sends a goodbye packet and stops advertising.
Enhancement
Service types are validated against RFC 6763 section 7 up front — MdnsException explains exactly what is wrong with a malformed type rather than failing silently at the socket. Service subtypes (_sub) and domains other than local are explicitly rejected in v1.