问题描述
我对OPCUA并不陌生,可以使用一个示例,说明如何使用https://accounts.google.com/.well-known/openid-configuration在C#中实现AddNodes服务。 基本上,我要做的是实现自定义服务器,并能够从客户端调用AddNodes服务,以将一些节点添加到文件夹中(并设置其初始值)。
我已经看到有许多类可以继承,所以我认为最好是从 StandardServer 继承并重写AddNodes方法。之后,我可以创建自己的自定义节点管理器,然后从此方法中调用它。但是,没有一个示例节点管理器实现了AddNodes方法(即使INodeManager接口也没有实现),所以我想知道自己是否走在正确的轨道上。
是否有人已经使用此SDK实现了AddNodes服务,并愿意给我一些如何实现的提示?您是否只是在自定义节点管理器上创建了自己的AddNodes方法并在其中添加了节点?一些代码片段将非常有帮助。谢谢!
解决方法
我认为您的做法正确。 SessionServerBase
由Opc.Ua.Services.wsdl
自动生成。 StandardServer
继承自SessionServerBase
,仅覆盖虚拟方法的子集。
因此,您需要在AddNodes
中覆盖StandardServer
,下面是添加节点的示例。
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);
}