Расширенная ошибка 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

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