У нас есть оркестровка с использованием SendPort для вызова внутренней веб-службы, которая не находится на том же компьютере, что и BizTalk. Точно такое же приложение отлично работает в BizTalk 2016, но не работает в BizTalk 2020.
Описание ошибки: System.Net.WebException: HTTP-запрос неавторизован со схемой проверки подлинности клиента «Согласование». Заголовок аутентификации, полученный от сервера, был «Negotiate».
Я прочитал связанный вопрос в StackOverflow: "Запрос HTTP неавторизован со схемой аутентификации клиента "Negotiate". Заголовок аутентификации, полученный от сервера, был "Negotiate""
У нас есть поведение WCF, называемое bizTalkAddHttpheaders. Весь код был перекомпилирован с помощью .NET 4.7.2 для BizTalk 2020. Мы пробовали с поведением WCF и без него, которое обрабатывает TLS 1.2.
@Dijkgraaf Спасибо, но решил, см. ответ.





Оказывается, имя пользователя экземпляра хоста просто не было настроено для этого приложения.
На самом деле я перепутал, какой это SendPort, поскольку это конкретное приложение вызывало два совершенно разных внутренних веб-сервиса. Как только я увидел, что это другой порт отправки, я поместил его под узел приложения со старым идентификатором пользователя, и это сработало.
При установке BizTalk 2020 в нашей разработке мы изменили идентификатор пользователя наших экземпляров хоста, чтобы он соответствовал соглашениям об именовании, используемым в QA и PROD. Поэтому нам пришлось создать множество заявок в службу поддержки, чтобы обеспечить надлежащую безопасность.
Я не знаю, почему ошибка не могла просто сказать «Имя пользователя = xxxxxx не авторизован», ее было бы намного проще идентифицировать.
Можете ли вы упреждающе принудительно выполнить аутентификацию в своем поведении вместо использования Negotiate? «Аутентификация с согласованием автоматически выбирает между протоколом Kerberos и аутентификацией NTLM, в зависимости от доступности».