Web服务不返回当前的Windows用户名

时间:2010-01-26 16:05:51

标签: c# .net asp.net vb.net asmx

这是我在Web服务中用于获取当前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用户名! 问题是当我从远程PC运行服务时,在这种情况下我从这个功能中得不到任何东西。这项服务有什么问题,以及如何获得Windows用户名?

谢谢!

4 个答案:

答案 0 :(得分:4)

您希望它返回哪个:来电者的身份?或者运行Web服务的服务帐户的标识?

在大多数情况下, windows 标识将取决于服务器的配置方式;它是否使用假冒?另外,您在调用服务时是否传递了呼叫者身份?例如,UseDefaultCredentialsCredentials。该服务是否已配置为识别用户声明?

一般情况下,我尝试来使用模仿;它需要在服务器上提升,不支持所有环境,并且可能对池的有效性产生很大影响 - 所以我不希望 windows 标识流动,但如果你正在通过某些表单中的调用者身份我可能希望“principal”(Thread.CurrentPrincipal)代表调用者。

我记不起asmx了,但是如果你愿意的话,你可以用WCF编写自己的代码来设置你自己的身份验证方案中的主体。

答案 1 :(得分:1)

试试这个

using System.Security.Principal;

[WebMethod()]
public string userName()
{
    return User.Identity.Name.ToString();
}

答案 2 :(得分:0)

您可以通过以下代码行获取当前线程正在运行的标识:

System.Threading.Thread.CurrentPrincipal.Identity.Name

答案 3 :(得分:0)

尝试:

string _userName = WindowsIdentity.GetCurrent().Name;