Почему ServicePointManager.SecurityProtocol отличается в консольном приложении и веб-сайте IIS на одном компьютере?
Я пытаюсь обновить набор проектов до.NET 4.6.1, чтобы получить поддержку TLS 1.2. Решение содержит набор библиотек классов, консольных приложений, веб-сайтов WebForms и веб-сайтов MVC.
Я уже изменил все проекты и веб-сайты на.NET 4.6.1 и перекомпилировал все.
Теперь, если я проверяю значение по умолчанию для ServicePointManager.SecurityProtocol в одном из консольных приложений, то я получаю следующее:
Tls, Tls11, Tls12
Но если я проверю значение по умолчанию для ServicePointManager.SecurityProtocol на одном из веб-сайтов WebForms, работающих под управлением IIS, то получу следующее:
Ssl3, Tls
Таким образом, я вижу разные значения для ServicePointManager.SecurityProtocol на одном компьютере при сравнении консольного приложения и веб-сайта WebForms в IIS.
Я могу подтвердить, что на веб-сайтах WebForms в "system.web" есть следующее:
<compilation debug="true" targetFramework="4.6.1">
Но кажется, что IIS игнорирует атрибут targetFramework.
Что-то, что мне нужно сделать в IIS, чтобы заставить это работать как ожидалось?
ОБНОВИТЬ:
Похоже, что IIS на самом деле соблюдает атрибут "targetFramework", но ServicePointManager.SecurityProtocol по-прежнему возвращает другое значение по умолчанию в IIS по сравнению с консольным приложением.
1 ответ
ОК, я решил это.
Чтобы изменить целевую платформу веб-сайта, щелкните ее правой кнопкой мыши, выберите "Страницы свойств", а затем измените "Целевую платформу" на странице "Создание".
Если вы сделаете это, то in изменит атрибут "targetFramework" на узле "compilation" под узлом "system.web":
<compilation targetFramework="4.6.1" />
Но этого недостаточно - вам также нужно изменить атрибут "targetFramework" на узле "httpRuntime" в узле "system.web":
<httpRuntime targetFramework="4.6.1" />
И теперь и веб-сайт под IIS, и консольное приложение сообщают об одном и том же для ServicePointManager.SecurityProtocol.