Веб-сервис не возвращает текущее имя пользователя Windows - PullRequest
1 голос
/ 26 января 2010

Это функция, которую я использую в веб-сервисе для получения текущего пользователя Windows.

 <WebMethod()> _
  Function User() As String
        Dim p() As String = Split(My.User.Name, "\")
        Dim p1 As String = p(1)
        Return p1
    End Function

Когда я запускаю сервис на localhost, он действительно возвращает текущее имя пользователя Windows! Проблема в том, что когда я запускаю сервис с удаленного ПК, в этом случае я ничего не получил от этой функции. В чем проблема с этим сервисом и как я могу получить имя пользователя Windows?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 26 января 2010

Что вы ожидаете получить: личность вызывающего абонента ?или идентификатор учетной записи службы, на которой запущен веб-сервис?

В большинстве случаев идентификатор windows будет зависеть от конфигурации сервера;это использует олицетворение?Кроме того, вы передаете идентификацию вызывающих абонентов при звонке в службу?Например, UseDefaultCredentials или Credentials.И настроен ли сервис на распознавание утверждений пользователей?

Обычно я пытаюсь не использовать олицетворение;он требует повышения прав на сервере, не поддерживает все среды и может оказать большое влияние на эффективность пула - поэтому я не ожидаю, что идентификация windows будет выполняться, но если вы передаетеидентификатор вызывающего абонента в некоторой форме. Я мог бы ожидать, что "принципал" (Thread.CurrentPrincipal) будет представлять вызывающего абонента.

Я не могу вспомнить из asmx, но с WCF вы можете написать свой собственныйкод для установки принципала из вашей собственной схемы аутентификации, если хотите.

1 голос
/ 09 марта 2011

Попробуйте это

using System.Security.Principal;

[WebMethod()]
public string userName()
{
    return User.Identity.Name.ToString();
}
0 голосов
/ 08 января 2019

Попробуйте:

string _userName = WindowsIdentity.GetCurrent().Name;
0 голосов
/ 26 января 2010

Вы можете получить идентификатор, под которым работает текущий поток, с помощью приведенной ниже строки кода:

System.Threading.Thread.CurrentPrincipal.Identity.Name
...