You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OPC UA C#客户端如何恢复带订阅的持久化会话?

OPC UA客户端会话恢复与离线消息处理方案

一、恢复之前的会话

要恢复原有会话,核心是复用原会话的标识信息,Opc Foundation库的Session.Recreate()需传入原会话的SessionId和AuthenticationToken,步骤如下:

  • 客户端首次创建会话成功后,将session.SessionId和session.AuthenticationToken这两个值持久化存储(比如本地文件、数据库)
  • 重启客户端时,调用Recreate()传入保存的参数尝试恢复,示例代码:
var session = new Session(
    config,
    endpointDescription,
    false,
    "",
    sessionTimeout,
    userIdentity,
    null);

// 用保存的会话信息尝试恢复
var recreateResult = session.Recreate(savedSessionId, savedAuthenticationToken);
if (recreateResult.IsGood)
{
    // 会话恢复成功
}

同时需确认你的Integration Objects仿真服务器已开启会话保留功能(在服务器配置界面调整“会话超时”“会话保留时长”参数)。

二、离线期间丢失的消息能否恢复

只有配置**耐用型订阅(Durable Subscription)**时,服务器才会缓存客户端离线期间的数据变化消息,恢复会话后可补传。普通订阅无缓存机制,离线消息会直接丢失。

三、持久化/耐用型会话与订阅的配置

客户端侧配置

  • 会话持久化:必须在客户端正常运行时保存SessionId和AuthenticationToken,重启时用这些参数调用Recreate()
  • 耐用订阅:创建订阅时设置Durable属性为true,示例:
var subscription = new Subscription(session.DefaultSubscription)
{
    DisplayName = "DurableSubscription",
    Durable = true,
    PublishingInterval = 1000,
    KeepAliveInterval = 2000,
    LifetimeCount = 10
};
subscription.FastDataChangeCallback = OnDataChange;
session.AddSubscription(subscription);
subscription.Create();

服务器侧配置

打开Integration Objects OPC UA Server Simulator的配置界面,调整两项设置:

  • 会话设置:修改“会话超时时间”“会话保留时长”,确保服务器在客户端断开后保留会话足够久
  • 订阅设置:开启“支持耐用订阅”,设置“订阅保留时长”,允许服务器缓存耐用订阅的消息

内容的提问来源于stack exchange,提问作者Stefano Cucchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:08:15