这是我在 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
当我在本地主机上运行服务时,它确实返回当前的 Windows 用户名! 问题是当我从远程 PC 运行服务时,在这种情况下我从该功能中一无所获。此服务有什么问题,我如何获取 Windows 用户的名称?
谢谢!
请您参考如下方法:
您希望它返回什么:来电者的身份?或运行网络服务的服务帐户的身份?
在大多数情况下,windows 标识将取决于服务器的配置方式;它在使用模拟吗?另外,您是否在调用该服务时传递了调用者的身份?例如,UseDefaultCredentials 或 Credentials。服务是否配置为识别用户声明?
一般来说,我尽量不使用模拟;它需要在服务器上进行提升,不支持所有环境,并且会对池的有效性产生重大影响 - 所以我不希望 windows 身份流动,但如果你通过某种形式的调用者身份我可能希望“主体”(Thread.CurrentPrincipal)代表调用者。
我不记得是从 asmx 开始的,但是如果需要,您可以使用 WCF 编写自己的代码以根据您自己的身份验证方案设置主体。
