Расширенная ошибка PSI (System.Net.WebException: запрос не выполнен с состоянием HTTP 401: не авторизован.)
В настоящее время я пытаюсь разработать веб-сервис ExtendedPSI, который в свою очередь вызывает ряд существующих веб-сервисов PSI. Проблема в том, что я получаю сообщение об ошибке (System.Net.WebException: запрос не выполнен с HTTP-статусом 401: неавторизован.), Когда я пытаюсь получить доступ к существующим службам PSI с помощью ExtendedPSI, который я создал.
Я могу заставить службу работать, если я жестко закодирую учетные данные в моем ExtendedPSI, используя следующий фрагмент:
resWS.Credentials = new NetworkCredential("userName", "userPass", "domain");
но не когда я использую:
resWS.Credentials = CredentialCache.DefaultCredentials;
(Я пробовал CredentialCache.DefaultNetworkCredentials, но прочитал, что это не работает через HTTP или FTP)
Я прочитал множество постов с предложениями, такими как включение аутентификации Windows, удаление анонимного доступа и т. Д., Либо в клиентском web.config, либо в виртуальном из вызывающего веб-приложения, однако я использую SoapUI для вызова службы ExtendedPSI, поскольку будет называться окончательное решение. платформой ESB (а именно SAP PI).
Но с помощью SoapUI мне удалось по очереди вызвать все существующие службы PSI (веб-службы, называемые в моей службе ExtendedPSI), указав свои данные для входа в систему через интерфейс SoapUI, чтобы я знал, что существующие службы работают до тех пор, пока я могу передавать учетные данные но они пусты при использовании CredentialCache.DefaultCredentials.
Надеюсь, что это имеет смысл для кого-то (это моя первая попытка веб-сервисов, поэтому я прошу прощения, если это немного расплывчато). На самом деле я не хочу жестко задавать детали входа в свой сервис, поэтому надеюсь, что кто-то сталкивался с этим раньше и нашел решение, которое я мог бы использовать...
Содержится ли информация, которая мне нужна, в HttpContext? Зашифрованный токен, который я могу передать (возможно, сюда):)? Или мне понадобится общий пользователь для доступа к этим существующим веб-службам PSI?
К вашему сведению: я следовал за статьей http://msdn.microsoft.com/en-us/library/bb428837.aspx (которую я расширил далее, чтобы называть существующие PSI), но она предполагает своего рода клиент MS.NET, вызывающий службу,
Заранее спасибо...
С уважением, ТартанБоно
1 ответ
Вы должны изменить web.config
вашего приложения, как это. Просто перезапишите узел безопасности в узле привязки:
<binding name="WssInteropSoap">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
Теперь вы можете проходить аутентификацию без специальной учетной записи (проход через Windows) или с помощью этого кода вы можете указать учетную запись:
//credential impersonation (just if you changed your binding settings)
projectSvc.ClientCredentials.Windows.ClientCredential = new NetworkCredential("username", "password", "domain");
projectSvc.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
Надеюсь, это поможет:)
Я также написал запись в блоге для настройки соединения с PSI: чтение пользовательских полей Project Server 2010 через PSI