通过C#实现OPC-UA服务端(二)


前言

通过我前面的一篇文件,我们已经能够搭建一个OPC-UA服务端了,并且也拥有了一些基础功能。这一次咱们就来了解一下OPC-UA的服务注册与发现,如果对服务注册与发现这个概念不理解的朋友,可以先百度一下,由于近年来微服务架构的兴起,服务注册与发现已经成为一个很时髦的概念,它的主要功能可分为三点:
1、服务注册;
2、服务发现;
3、心跳检测。

如果运行过OPC-UA源码的朋友们应该已经发现了,OPC-UA服务端启动之后,每隔一会就会输出一行错误提示信息,大致内容是"服务端注册失败,xxx毫秒之后重试",通过查看源码我们可以知道,这是因为OPC-UA服务端启动之后,会自动调用"opc.tcp://localhost:4840/"的RegisterServer2方法注册自己,如果注册失败,则会立即调用RegisterServer方法再次进行服务注册,而由于我们没有"opc.tcp://localhost:4840/"这个服务,所以每隔一会儿就会提示服务注册失败。
现在我们就动手来搭建一个"opc.tcp://localhost:4840/"服务,在OPC-UA标准中,它叫Discovery Server。

一、服务配置

Discovery Server的服务配置与普通的OPC-UA服务配置差不多,只需要注意几点:
1、服务的类型ApplicationType是DiscoveryServer而不是Server;
2、服务启动时application.Start()传入的实例化对象需要实现IDiscoveryServer接口。

配置代码如下:

var config = new ApplicationConfiguration()
{
   
    ApplicationName = "Axiu UA Discovery",
    ApplicationUri = Utils.Format(@"urn:{0}:AxiuUADiscovery", System.Net.Dns.GetHostName()),
    ApplicationType = ApplicationType.DiscoveryServer,
    ServerConfiguration = new ServerConfiguration()
    {
   
        BaseAddresses = {
    "opc.tcp://localhost:4840/" },
        MinRequestThreadCount = 5,
        MaxRequestThreadCount = 100,
        MaxQueuedRequestCount = 200
    },
    DiscoveryServerConfiguration = new DiscoveryServerConfiguration()
    {
   
        BaseAddresses = {
    "opc.tcp://localhost:4840/" },
        ServerNames = {
    "OpcuaDiscovery" }
    },
    SecurityConfiguration = new SecurityConfiguration
    {
   
        ApplicationCertificate = new CertificateIdentifier {
    StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault", SubjectName = Utils.Format(@"CN={0}, DC={1}", "AxiuOpcua", System.Net.Dns.GetHostName()) },
        TrustedIssuerCertificates = new CertificateTrustList {
    StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities" },
        TrustedPeerCertificates = new CertificateTrustList {
    StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications" },
        RejectedCertificateStore = new CertificateTrustList {
    StoreType = @"Directory", StorePath = @"%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates" },
        AutoAcceptUntrustedCertificates = true,
        AddAppCertToTrustedStore = true
    },
    TransportConfigurations = new TransportConfigurationCollection(),
    TransportQuotas = new TransportQuotas {
    OperationTimeout = 15000 },
    ClientConfiguration = new ClientConfiguration {
    DefaultSessionTimeout = 60000 },
    TraceConfiguration = new TraceConfiguration()
};
config.Validate(ApplicationType.DiscoveryServer).GetAwaiter().GetResult();
if (config.SecurityConfiguration.AutoAcceptUntrustedCertificates)
{
   
    config.CertificateValidator.CertificateValidation += (s, e) => {
    e.Accept = (e.Error.StatusCode == StatusCodes.BadCertificateUntrusted); };
}

var application = new ApplicationInstance
{
   
    ApplicationName = "Axiu UA Discovery",
    ApplicationType = ApplicationType.DiscoveryServer,
    ApplicationConfiguration = conf
  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
C# OPC UA 服务端是一个用于构建基于 OPC UA 标准的服务端应用程序的开发框架。通过使用 C#OPC Foundation 提供的 OPC UA 标准库,你可以创建一个支持 OPC UA 协议的服务端。 要创建一个 C# OPC UA 服务端,你可以按照以下步骤进行操作: 1. 安装 OPC Foundation 提供的 OPC UA .NET 标准库。你可以从 OPC Foundation 的官方网站下载并安装这个库。 2. 在你的 C# 项目中添加对 OPC UA .NET 标准库的引用。你可以在 Visual Studio 中右键点击项目,选择“添加引用”,然后选择 OPC UA .NET 标准库。 3. 创建一个 OPC UA 服务器对象,并配置服务器的设置。你可以设置服务器的名称、描述、地址等参数,以及添加需要暴露的节点和变量。 4. 在服务器对象中注册需要提供的节点和变量。你可以创建自定义的节点类型,并为每个节点设置相应的属性和值。 5. 启动服务器并监听客户端的连接请求。你可以使用服务器对象的方法来启动服务器,并监听客户端的连接。 6. 处理客户端的请求和数据读写操作。通过事件和回调函数,你可以处理客户端的请求,例如读取节点的值、写入节点的值等。 7. 实现安全性和权限控制。通过 OPC UA 的安全机制,你可以实现对客户端的身份验证、加密通信和权限控制。 通过这些步骤,你可以创建一个 C# OPC UA 服务端,并提供基于 OPC UA 的数据访问和通信功能。在开发过程中,你可以参考 OPC Foundation 提供的文档和示例代码,以及使用 C# 的相关编程知识和技术来实现你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值