2

我创建了从 .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 用户。

4

2 回答 2

6

UseDefaultCredentials = true; 

这将验证当前用户(或当前进程正在运行的帐户)

于 2012-12-05T10:31:39.357 回答
2

您是否在调用它之前将网络凭据传递给您的 Web 服务对象?就像是:

NetworkCredential credentials = new
NetworkCredential(UserName,SecurelyStroredPassword,Domain);

// Add the NetworkCredential to the CredentialCache.
credentialCache.Add(new Uri(webSrvc.Url), 
                   "Basic", credentials);

抄自:http: //msdn.microsoft.com/en-us/library/bfazk0tb.aspx

基本上,当从 Web 应用程序调用 Web 服务时,您已经拥有所有 cookie 和会话信息。当你编写一个独立的应用程序时,它将无法访问 cookie、表单数据等。

于 2012-07-10T18:57:12.757 回答