跳到主要内容

GetEndpoints

前置 / 配套

签名

public static IReadOnlyList<EndpointDescription> Discovery.GetEndpoints(string serverUrl);

通过临时 SecureChannel (None mode) 连服务端, 拉 Endpoint 列表后立即断开. 不需要 Session.

EndpointDescription 字段

字段类型说明
EndpointUrlstring实际 endpoint URL
SecurityModeMessageSecurityModeNone / Sign / SignAndEncrypt
SecurityPolicyUristring算法套件 URI
ServerCertificatebyte[]服务端证书 (DER)
UserIdentityTokensIReadOnlyList<UserTokenPolicy>支持的登录方式
TransportProfileUristring传输 Profile (通常 UA-TCP)
SecurityLevelbyte服务端推荐优先级

UserTokenPolicy 字段

字段说明
PolicyId服务端给的 ID, 客户端激活时传回
TokenTypeAnonymous / Username / Certificate / Issued
IssuedTokenType(Issued 才有) JWT / SAML / OAuth2 等
IssuerEndpointUrl(Issued 才有) Token Issuer 端点
SecurityPolicyUriToken 自身的加密 (可与通道不同)

用法

var endpoints = Discovery.GetEndpoints("opc.tcp://server:4840");

Console.WriteLine($"Server has {endpoints.Count} endpoints:");
foreach (var ep in endpoints)
{
Console.WriteLine($"\n URL: {ep.EndpointUrl}");
Console.WriteLine($" Mode: {ep.SecurityMode}");
Console.WriteLine($" Policy: {ep.SecurityPolicyUri}");
Console.WriteLine($" Tokens:");
foreach (var t in ep.UserIdentityTokens)
Console.WriteLine($" - {t.TokenType} (PolicyId={t.PolicyId})");
}

典型输出

Server has 4 endpoints:

URL: opc.tcp://server:4840
Mode: None
Policy: http://opcfoundation.org/UA/SecurityPolicy#None
Tokens:
- Anonymous

URL: opc.tcp://server:4840
Mode: Sign
Policy: http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
Tokens:
- Anonymous
- Username

URL: opc.tcp://server:4840
Mode: SignAndEncrypt
Policy: http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256
Tokens:
- Username
- Certificate

服务端通常暴露多个组合 (None / Sign / SignAndEncrypt × Anonymous / Username / Certificate), 客户端按需求挑.


异常

异常含义
OpcUaException(BadCommunicationError)网络 / 服务端不可达
OpcUaException(BadServiceUnsupported)服务端不支持 Discovery (罕见)

下一步