我创建了从 .NET Web 应用程序调用的简单 .NET Web 服务 (ASMX)。该服务和 Web 应用程序都使用 Windows 身份验证。
com.mydomain.MyWebService webSrvc = new com.mydomain.MyWebService();
string output = webSrvc.MyServiceMethod();
我现在正在使用 C# 创建 Windows 应用程序,并希望从那里调用相同的 Web 服务。我在我的项目中向服务添加了一个 Web 引用,我可以毫无问题地调用服务 Web 方法。问题是,在 web 方法中,我试图检索用户的 windows 用户名。
string username = User.Identity.Name; //always blank
这在我从我的网络应用程序调用网络服务时有效,但是当我从我的 Windows 应用程序调用它时,它总是返回空白,并且 User.Identity.IsAuthenticated 总是假的,如果这是相关的。我在这里想念什么。我只需要获取运行控制台应用程序(称为 Web 服务)的 Windows 用户用户名。我尝试将 webSrvc 的凭据设置为 ClientCache 默认凭据,但这并不能解决问题。
更新:我不知道这是否有用,但我了解到,如果我使用 Environment.UserName,它将给出“NETWORK_SERVICE”,然后如果我启用模拟,它将给出“IUSR_[host_name]”。好像我只是错过了一些非常简单的东西。我只想获取正在运行 Windows 应用程序(调用 Web 服务)的当前 Windows 用户。