Чтобы исправить ошибку в моем приложении, мне пришлось установить SecurityProtocolType класса ServicePointManager, найденного в сборке System.Net, следующим образом:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
В .Net 4.5+ перечисление SecurityProtocolType имеет четыречлены:
public enum SecurityProtocolType
{
Ssl3 48,
Tls 192,
Tls11 768,
Tls12 3072
}
Однако в .Net 4.0 перечисление SecurityProtocolType имеет только два члена:
public enum SecurityProtocolType
{
Ssl3 48,
Tls 192
}
Поскольку другой проект в моем коде также нуждался в таком же исправлении, но этот проект былв .Net 4.0, для которого в перечислении нет члена Tls12, этот ответ предложил следующий обходной путь (при условии, что .Net 4.5 установлен на том же компьютере):
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
Может быть, мне не хватает очевидного сглаживания, но мой вопрос в том, как (SecurityProtocolType)3072
разрешается в Tls12, когда 3072 не является допустимым значением для перечисления в .Net 4.0.Я хочу понять, какая магия происходит за кулисами, которая заставляет эту работу.