如何用C#和OPC-Foundation库创建OPC-UA服务器并解决客户端连接问题
解决OPC-UA服务器局域网可发现与连接问题
一、修改服务器配置,添加可访问端点与发现服务
你的现有代码缺少端点绑定和发现服务配置,导致局域网内客户端无法定位服务器。修改后的代码如下:
using Opc.Ua; using Opc.Ua.Server; var certificate = new CertificateIdentifier { SubjectName = "CN=YourServerNameOrIP" }; var applicationConfiguration = new ApplicationConfiguration { ApplicationName = "MyOPCUAServer", ApplicationUri = $"urn:{Environment.MachineName}:MyOPCUAServer", // 服务器唯一标识 SecurityConfiguration = new SecurityConfiguration { TrustedIssuerCertificates = new CertificateTrustList(), ApplicationCertificate = certificate, AutoAcceptUntrustedCertificates = true, // 测试环境临时开启,生产环境需关闭并配置信任列表 }, ServerConfiguration = new ServerConfiguration { BaseAddresses = new List<string> { // 绑定局域网可访问地址,替换为服务器IP或机器名 $"opc.tcp://{Environment.MachineName}:4840/MyOPCUAServer", "opc.tcp://localhost:4840/MyOPCUAServer" // 保留本地访问入口 }, DiscoveryUrls = new List<string> { // 客户端发现服务的地址 $"opc.tcp://{Environment.MachineName}:4840/MyOPCUAServer/discovery" } }, TransportQuotas = new TransportQuotas(), DiscoveryProfileUri = Profiles.Discovery, }; await applicationConfiguration.Validate(ApplicationType.Server); var applicationInstance = new ApplicationInstance(applicationConfiguration); await applicationInstance.CheckApplicationInstanceCertificate(false, CertificateFactory.DefaultKeySize); var server = new StandardServer(); server.ServerManager.LoadDefaultNodeSet(); // 加载默认节点集,确保服务器功能完整 await applicationInstance.Start(server); Console.WriteLine("OPC-UA服务器已启动,端点地址:"); foreach (var addr in applicationConfiguration.ServerConfiguration.BaseAddresses) { Console.WriteLine(addr); } Console.WriteLine("按任意键停止服务器..."); Console.ReadKey(); await applicationInstance.Stop();
二、关键配置说明
- BaseAddresses:必须包含局域网可解析的IP或机器名,不能仅绑定localhost,否则其他设备无法访问。
- ApplicationUri:服务器的唯一标识,格式为
urn:{机器名/IP}:{应用名},确保客户端能正确识别目标服务器。 - AutoAcceptUntrustedCertificates:测试阶段临时开启以快速验证连接,生产环境需关闭,手动配置客户端与服务器的双向证书信任。
- DiscoveryUrls:指定客户端用于查找服务器的发现服务地址,UA-Expert等工具依赖此地址获取端点列表。
三、局域网访问的额外配置
- 防火墙设置:在服务器上允许OPC-UA默认端口4840的TCP流量(若修改端口则对应调整)。
- Windows防火墙:添加入站规则,允许TCP端口4840的外部连接。
- 证书信任处理:
- UA-Expert首次连接时会弹出证书信任提示,选择“Trust”并添加到信任列表,否则连接会被拒绝。
- 生产环境建议导出服务器证书,手动导入到客户端的信任存储中,避免手动确认。
四、UA-Expert连接步骤
- 打开UA-Expert,点击左上角的“+”按钮(Add Server)。
- 在“Add Server”窗口选择“Custom Discovery”,输入服务器的发现地址:
opc.tcp://{服务器IP或机器名}:4840/MyOPCUAServer/discovery,点击“Find Servers”。 - 找到目标服务器后选中,点击“Next”,按照提示完成证书信任配置,即可建立连接。
内容的提问来源于stack exchange,提问作者turi reggiu
相关产品推荐
相关产品推荐

