我创建了一个简单的.NET Web服务(ASMX),我从.NET Web应用程序调用它。服务和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
当我从我的网络应用程序调用Web服务时,这是有效的,但当我从我的Windows应用程序调用它时,它总是返回空白,并且User.Identity.IsAuthenticated始终为false,如果这是相关的。我在这里想念的是什么我只需要获取运行控制台应用程序的Windows用户用户名,即调用Web服务。我已尝试将webSrvc的凭据设置为ClientCache默认凭据,但这并不能解决问题。
更新:我不知道这是否有用,但我了解到如果我使用Environment.UserName,它将提供“NETWORK_SERVICE”,然后如果我启用模拟,它将给出“IUSR_ [host_name]”。看起来我只是缺少一些非常简单的东西。我只想获得当前运行Windows应用程序(调用Web服务)的Windows用户。
答案 0 :(得分:6)
设置
UseDefaultCredentials = true;
这将验证当前用户(或当前进程正在运行的帐户)
答案 1 :(得分: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,表单数据等。