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

VB.NET中OPC UA安全连接Lambda参数BC36641错误求助

解决VB.NET中Lambda参数BC36641错误(OPC UA客户端证书验证)

将C#的OPC UA客户端配置代码转换为VB.NET后,在证书验证的事件处理代码行出现BC36641错误:

AddHandler config.CertificateValidator.CertificateValidation, Sub(s, e) e.Accept = e.Error.StatusCode = StatusCodes.BadCertificateUntrusted

错误提示:Lambda参数''隐藏了封闭块中的变量、先前定义的范围变量或查询表达式中隐式声明的变量。

解决方案

显式声明Lambda表达式的参数类型,避免编译器的类型推断与外部范围变量产生冲突。修改后的代码如下:

If config.SecurityConfiguration.AutoAcceptUntrustedCertificates Then
    AddHandler config.CertificateValidator.CertificateValidation, 
        Sub(s As Object, e As CertificateValidationEventArgs)
            e.Accept = (e.Error.StatusCode = StatusCodes.BadCertificateUntrusted)
        End Sub
End If

原因说明

VB.NET的隐式类型参数(未声明类型的s和e)可能与当前代码块中已存在的同名变量,或是编译器隐式推断的变量产生作用域冲突,导致BC36641错误。通过显式指定参数的具体类型(Object和CertificateValidationEventArgs),可以明确参数的作用域,解决冲突问题。

完整修正后的VB.NET代码片段

Console.WriteLine("Configuring UA Client")
Dim config = New ApplicationConfiguration() With {
    .ApplicationName = "OPC_Client_SQL",
    .ApplicationUri = Utils.Format("urn:{0}:OPC_Client_SQL", System.Net.Dns.GetHostName()),
    .ApplicationType = ApplicationType.Client,
    .SecurityConfiguration = New SecurityConfiguration With {
        .ApplicationCertificate = New CertificateIdentifier With {
            .StoreType = "Directory",
            .StorePath = "%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault",
            .SubjectName = "OPC_Client_SQL"
        },
        .TrustedIssuerCertificates = New CertificateTrustList With {
            .StoreType = "Directory",
            .StorePath = "%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities"
        },
        .TrustedPeerCertificates = New CertificateTrustList With {
            .StoreType = "Directory",
            .StorePath = "%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications"
        },
        .RejectedCertificateStore = New CertificateTrustList With {
            .StoreType = "Directory",
            .StorePath = "%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates"
        },
        .AutoAcceptUntrustedCertificates = True
    },
    .TransportConfigurations = New TransportConfigurationCollection(),
    .TransportQuotas = New TransportQuotas With {
        .OperationTimeout = 15000
    },
    .ClientConfiguration = New ClientConfiguration With {
        .DefaultSessionTimeout = 60000
    },
    .TraceConfiguration = New TraceConfiguration()
}

config.Validate(ApplicationType.Client).GetAwaiter().GetResult()
If config.SecurityConfiguration.AutoAcceptUntrustedCertificates Then
    AddHandler config.CertificateValidator.CertificateValidation, 
        Sub(s As Object, e As CertificateValidationEventArgs)
            e.Accept = (e.Error.StatusCode = StatusCodes.BadCertificateUntrusted)
        End Sub
End If

内容的提问来源于stack exchange,提问作者DL-PLP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:28:11