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

如何用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等工具依赖此地址获取端点列表。

三、局域网访问的额外配置

  1. 防火墙设置:在服务器上允许OPC-UA默认端口4840的TCP流量(若修改端口则对应调整)。
    • Windows防火墙:添加入站规则,允许TCP端口4840的外部连接。
  2. 证书信任处理:
    • UA-Expert首次连接时会弹出证书信任提示,选择“Trust”并添加到信任列表,否则连接会被拒绝。
    • 生产环境建议导出服务器证书,手动导入到客户端的信任存储中,避免手动确认。

四、UA-Expert连接步骤

  1. 打开UA-Expert,点击左上角的“+”按钮(Add Server)。
  2. 在“Add Server”窗口选择“Custom Discovery”,输入服务器的发现地址:opc.tcp://{服务器IP或机器名}:4840/MyOPCUAServer/discovery,点击“Find Servers”。
  3. 找到目标服务器后选中,点击“Next”,按照提示完成证书信任配置,即可建立连接。

内容的提问来源于stack exchange,提问作者turi reggiu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:16:06