get_endpoints
前置 / 配套
- 拉到 Endpoint 后用 构造函数 真正建立 Session.
- 跨服务发现请用 find_servers.
签名
@staticmethod
def get_endpoints(endpoint_url: str,
timeout_ms: int = 10_000) -> List[EndpointDescription]: ...
通过临时 SecureChannel (None mode) 连服务端, 拉 Endpoint 列表后立即断开. 不需要 Session.
EndpointDescription 字段
| 字段 | 类型 | 说明 |
|---|---|---|
endpoint_url | Optional[str] | 实际 endpoint URL |
security_mode | MessageSecurityMode | NONE / Sign / SignAndEncrypt |
security_policy_uri | Optional[str] | 算法套件 URI |
server_application_uri | Optional[str] | Server 应用 URI |
server_product_uri | Optional[str] | Server 产品 URI |
server_application_name | Optional[str] | Server 应用名 |
server_application_type | int | 0=Server / 1=Client / 2=ClientAndServer / 3=DiscoveryServer |
server_certificate | Optional[bytes] | 服务端证书 (DER) |
transport_profile_uri | Optional[str] | 传输 Profile (通常 UA-TCP) |
security_level | int | 服务端推荐优先级 |
user_tokens | List[UserTokenPolicy] | 支持的登录方式 |
UserTokenPolicy 字段
| 字段 | 类型 | 说明 |
|---|---|---|
policy_id | Optional[str] | 服务端给的 ID, 客户端激活时传回 |
token_type | UserTokenType | Anonymous / Username / Certificate / Issued |
用法
from darra_opcua import OpcUaDiscovery
endpoints = OpcUaDiscovery.get_endpoints("opc.tcp://server:4840")
print(f"Server has {len(endpoints)} endpoints:")
for ep in endpoints:
print(f"\n URL: {ep.endpoint_url}")
print(f" Mode: {ep.security_mode.name}")
print(f" Policy: {ep.security_policy_uri}")
print(f" Tokens:")
for t in ep.user_tokens:
print(f" - {t.token_type.name} (policy_id={t.policy_id})")
典型输出
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), 客户端按需求挑.
异常
| 异常 | 含义 |
|---|---|
ValueError("endpoint_url is required") | URL 为空 |
OpcUaException(BadCommunicationError) | 网络 / 服务端不可达 |
OpcUaException(BadServiceUnsupported) | 服务端不支持 Discovery (罕见) |