如何使用 .NET Standard SDK 在 OPCUA 中实现 AddNodes 服务

How to implement the AddNodes service in OPCUA using the .NET Standard SDK

我是 OPCUA 的新手,可以使用一个示例来说明如何使用 official .NET Standard SDK 在 C# 中实现 AddNodes 服务。 基本上我想做的是实现我的自定义服务器并能够从客户端调用 AddNodes 服务以将一些节点添加到文件夹(并设置它们的初始值)。

我看到有多种 类 可以继承,所以我认为最好是继承 StandardServer 并覆盖 AddNodes 方法。之后,我可以创建自己的自定义节点管理器并从此方法中调用它。但是,none 示例节点管理器实现了 AddNodes 方法(即使 INodeManager 接口也没有实现)所以我想知道我是否在正确的轨道上。

是否有人已经使用此 SDK 实现了 AddNodes 服务,并且愿意给我一些提示?您是否刚刚在自定义节点管理器上创建了自己的 AddNodes 方法并在那里添加了节点?一些代码片段会很有帮助。谢谢!

我认为您的方向是正确的。 SessionServerBaseOpc.Ua.Services.wsdl 自动生成。 StandardServer 继承自 SessionServerBase,仅覆盖虚方法的 子集

所以需要覆盖StandardServer中的AddNodes,下面是添加节点的例子

public override ResponseHeader AddNodes(
    RequestHeader requestHeader,
    AddNodesItemCollection nodesToAdd,
    out AddNodesResultCollection results,
    out DiagnosticInfoCollection diagnosticInfos)
{
    results = null;
    diagnosticInfos = null;

    ValidateRequest(requestHeader);

    foreach (var item in nodesToAdd)
    {
        if (item.NodeClass == NodeClass.Variable)
        {
            var node = new VariableNode
            {
                // TODO: Initialization
            };
            m_serverInternal.CoreNodeManager.AttachNode(node);
        }
        else if (item.NodeClass == NodeClass.VariableType)
        {
            var node = new VariableTypeNode
            {
                // TODO: Initialization
            };
            m_serverInternal.CoreNodeManager.AttachNode(node);
        }
        else
        {
            // TODO
        }
    }

    return CreateResponse(requestHeader, StatusCodes.Good);
}