这是我在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用户名?
谢谢!
答案 0 :(得分:4)
您希望它返回哪个:来电者的身份?或者运行Web服务的服务帐户的标识?
在大多数情况下, windows 标识将取决于服务器的配置方式;它是否使用假冒?另外,您在调用服务时是否传递了呼叫者身份?例如,UseDefaultCredentials
或Credentials
。该服务是否已配置为识别用户声明?
一般情况下,我尝试不来使用模仿;它需要在服务器上提升,不支持所有环境,并且可能对池的有效性产生很大影响 - 所以我不希望 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;