未执行WCF连接的服务ServicePointManager.ServerCertificateValidationCallback

问题描述 投票:0回答:1

我在项目中添加了WCF连接的服务参考,并设置了ServicePointManager.ServerCertificateValidationCallback功能。由于某些原因,当我请求服务器时,将忽略此回调函数。我必须通知用户有关证书问题,如果用户确认,则继续进行请求。

static async Task Main(string[] args)
{
    ServicePointManager.ServerCertificateValidationCallback = MyServerCertificateValidationCallback;
    var data = new DataSoapClient(DataSoapClient.EndpointConfiguration.DataSoap);
    data.Endpoint.Address = new EndpointAddress("https://open.helios.eu/demo/Data.asmx");
    (data.Endpoint.Binding as BasicHttpBinding).Security.Mode = BasicHttpSecurityMode.Transport;
    var result = (await data.GetInfoAsync("GETREDIRECTINFO", string.Empty)).Body.GetInfoResult;
    Console.WriteLine(result);
}

private static bool MyServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    // function won't execute
    return true;
}
c# wcf soap-client servicepointmanager
1个回答
0
投票
此代码段在Dotnetframework项目中有效,在Dotnet Core项目中无效。通常,在确保证书可以信任的情况下,我们应该将服务器提供的证书安装到客户端的根CA证书存储中。enter image description here此外,以下代码段在Dotnet Core项目中也能很好地工作。
ServiceReference1.TestServiceClient client = new ServiceReference1.TestServiceClient();
        client.ClientCredentials.ServiceCertificate.SslCertificateAuthentication = new System.ServiceModel.Security.X509ServiceCertificateAuthentication
        {
            CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None,
            RevocationMode = System.Security.Cryptography.X509Certificates.X509RevocationMode.NoCheck
        };

随时让我知道问题是否仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.