Почему 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.

Другие вопросы по тегам