跳到主要内容

FindServers

前置 / 配套

签名​

public static IReadOnlyList<ApplicationDescription> Discovery.FindServers(string discoveryUrl);

向 Local Discovery Server (LDS) 查询同域内注册的所有 OPC UA Server.

ApplicationDescription 字段​

字段类型说明
ApplicationUristring应用 URI (全局唯一标识)
ProductUristring产品 URI
ApplicationNamestring应用显示名
ApplicationTypeintServer (0) / Client (1) / ClientAndServer (2) / DiscoveryServer (3)
GatewayServerUristring网关 (可空)
DiscoveryProfileUristringDiscovery Profile
DiscoveryUrlsIReadOnlyList<string>该 Server 的 endpoint URLs

用法​

var servers = Discovery.FindServers("opc.tcp://lds-host:4840");

Console.WriteLine($"Domain has {servers.Count} servers:");
foreach (var s in servers)
{
Console.WriteLine($"\n App: {s.ApplicationName}");
Console.WriteLine($" AppUri: {s.ApplicationUri}");
Console.WriteLine($" Type: {s.ApplicationType}");
Console.WriteLine($" Discovery URLs:");
foreach (var url in s.DiscoveryUrls)
Console.WriteLine($" - {url}");
}

LDS​

LDS = Local Discovery Server, OPC Foundation 提供. 同子网内 Server 启动时可注册到 LDS, 客户端通过 FindServers 即发现全部.

LDS 默认监听 4840 (与普通 Server 同端口), 通常装在专门一台主机, 也可与 Server 共部署.

FindServersOnNetwork (扩展)​

LDS 还有 FindServersOnNetwork 服务, 跨子网通过 mDNS 发现. 当前 SDK 未暴露此 API, 如需可走底层调用.

用例: 自动 Server 切换 (冗余)​

冗余场景下, 主备 Server 都注册到同一 LDS. 客户端定期 FindServers, 主 Server 失联时切到备:

var servers = Discovery.FindServers("opc.tcp://lds:4840");
var primary = servers.FirstOrDefault(s => s.ApplicationUri == "urn:plant:server-primary");
var backup = servers.FirstOrDefault(s => s.ApplicationUri == "urn:plant:server-backup");

var url = primary?.DiscoveryUrls.First() ?? backup?.DiscoveryUrls.First();

下一步​