使用Windows身份验证从C#app调用ASMX服务?

时间:2012-07-10 18:00:17

标签: c# .net authentication asmx

我创建了一个简单的.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用户。

2 个答案:

答案 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,表单数据等。