有没有办法在单个应用程序中为一个 WCF 调用指定 TLS 1.0,为另一个 WCF 或 WebClient 调用指定

本文关键字:WCF 调用 TLS WebClient 另一个 单个 应用程序 有没有 一个 | 更新日期: 2023-09-27 17:56:54

我有一个需要调用多个 Web 服务的应用程序。一个 Web 服务仅适用于 TLS 1.0。另一个禁用了 TLS 1.0。

有没有办法指定您希望在每个 WCF Web 服务调用上使用哪个 TLS 版本?

我可以使用

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

但它似乎全面强制了这种设置。

.net 4.5.2

示例代码:

using System;
using System.Net;
namespace SSLTest
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                Test();
                System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
                Test();
            }
                Console.ReadKey();
            }

        static void Test()
        {
            try
            {
                Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol);
                WebClient client = new WebClient();
                client.DownloadFile("https://webservices2.autotask.net/atservices/1.5/atws.wsdl", @"c:'code'test.wsdl");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

输出:

Tls12
System.Net.WebException: The request was aborted: Could not create SSL/TLS secur
e channel.
   at System.Net.WebClient.DownloadFile(Uri address, String fileName)
   at System.Net.WebClient.DownloadFile(String address, String fileName)
   at SSLTest.Program.Test() in c:'code'sandbox'SSLTest'SSLTest'SSLTest'Program.
cs:line 28
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls
Tls12
Tls

有没有办法在单个应用程序中为一个 WCF 调用指定 TLS 1.0,为另一个 WCF 或 WebClient 调用指定

您可以指定多个安全协议,如下所示:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;