从C#应用程序调用ASMX服务与Windows身份验证?(Calling ASMX Service

2019-09-19 06:54发布

我创建了简单的.NET Web服务(ASMX),我从我的.NET Web应用程序调用。 服务和Web应用程序都使用Windows Authetication。

com.mydomain.MyWebService webSrvc = new com.mydomain.MyWebService();
string output = webSrvc.MyServiceMethod();

我现在创建与C#Windows应用程序,并想从那里调用相同的Web服务。 我已经加入在我的项目到服务的Web引用,我可以到服务的Web方法没有问题的电话。 问题是,在网络里面的方法,我试图检索用户的Windows用户名。

string username = User.Identity.Name; //always blank

这工作,当我从我的web应用程序调用Web服务,但是当我把它从我的Windows应用程序,它总是返回空白,User.Identity.IsAuthenticated始终是假的,如果是相关的。 缺少什么我在这里。 我只需要得到运行控制台应用程序,调用Web服务的Windows用户的用户名。 我曾尝试webSrvc的凭据设置为默认ClientCache凭据,但这并不解决问题。

更新:我不知道这是否是有用的,但我知道,如果我用Environment.UserName,它将给“NETWORK_SERVICE”,然后如果我启用模拟,它会给“IUSR_ [HOST_NAME]”。 好像我只是失去了一些东西真的很简单。 我只是想获得当前的Windows用户,谁是运行Windows应用程序(它调用Web服务)。

Answer 1:

你是通过网络凭据到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和session信息坚持围绕。 当你写一个独立的应用程序将无法访问饼干,表单数据,等等。



Answer 2:

UseDefaultCredentials = true; 

这将验证的currentuser(或该帐户的当前运行进程)



文章来源: Calling ASMX Service from C# app with Windows authentication?