我已经创建了简单的.NET Web服务(ASMX),我从我的.NET Web应用程序调用。服务和Web应用程序都使用Windows验证。使用Windows身份验证从C#应用程序调用ASMX服务?
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应用程序调用Web服务,但是当我把它从我的Windows应用程序,它总是返回空白,User.Identity.IsAuthenticated始终是假的,如果是相关的。我在这里错过了什么。我只需要获取运行控制台应用程序的Windows用户用户名即称为Web服务。我曾尝试将webSrvc的凭据设置为ClientCache默认凭据,但这并不能解决问题。
更新:我不知道这是否有用,但我了解到,如果我使用Environment.UserName,它会给“NETWORK_SERVICE”,然后如果我启用模拟,它会给“IUSR_ [host_name]” 。看来我只是错过了一些非常简单的事情。我只想获得当前正在运行Windows应用程序(调用Web服务)的Windows用户。
我使用默认凭据,因为我不知道公司中每个用户的密码。由于我使用禁用匿名访问的Windows身份验证,因此不应该这样工作。 – dave823 2012-07-24 20:27:46
“因为我使用禁用匿名访问的Windows身份验证,所以不应该这样工作”。不,实际上。您使用的代码不会将凭据“传递”给您的Web服务对象。它在浏览器中工作,因为这是浏览器制造商(MS)打开的行为。但是,默认情况下,您的Windows窗体应用程序不会将所运行的凭据传递给Web服务。你必须明确地设置它。 – Richthofen 2012-07-24 20:56:55
感谢您的意见。在您的代码示例中,我仍然不明白我是如何获得用户密码以传递到网络凭据的。我可以从Windows身份获取用户名和域名,但密码又如何?另外,我注意到您的代码使用“基本”身份验证。如果将IIS Web应用程序配置为“集成Windows身份验证”,这会工作吗? – dave823 2012-08-29 18:56:37