如何通过当前用户凭据的.asmx Web服务
问题描述:
我创造了我的内网Web服务器上运行的Web服务。 该服务具有调用Microsoft SparePoint的lists.asmx Web服务的操作。 该服务还有一个测试操作。 当我在本地调用这些服务时(视觉工作室),一切都很好。
问题:
当我部署此Web服务到Web服务器上的IIS调用lists.asmx失败,出现401错误的操作。当我在登录到Web服务器时从IE运行服务时,或者如果我远程运行服务(我将自定义错误设置为关闭,所以我可以看到401错误)时,会发生这种情况。
预期结果:
我的web服务应该取当前用户的凭据并将它们传递给lists.asmx web服务。
目前代码: 设置在Web服务的凭据:
sharepointService.Lists listService = new sharePointService.Lists();
listService.Credentials = System.Net.CredentialCache.DefaultCredentials;
设置在web.config中的Web引用:
<applicationSettings>
<MyServices.Properties.Settings>
<setting name="sharepointService_Lists" serializeAs="String">
<value>http://sharepoint.myDomain.com/_vti_bin/lists.asmx</value>
</setting>
</MyServices.Properties.Settings>
</applicationSettings>
其他信息:
的测试操作部署在IIS Web服务器上时工作ER和返回两个字符串如下:
HttpContext.Current.Request.LogonUserIdentity.Name
= NT AUTHORITY\IUSR
System.Security.Principal.WindowsIdentity.GetCurrent().Name
= IIS APPPOOL\ASP.NET v4.0
所以它看起来像网络serivce使用IIS应用程序池的用户名,如果提供任何有用的信息。
解决方案:
想法?谢谢!
我设置了Windows身份验证在IIS启用,我能得到HttpContext.Current.Request.LogonUserIdentity.Name返回实际的当前用户。但是,lists.asmx web服务仍然返回401错误 – kralco626
当我使用以下代码:'listService.Credentials = new NetworkCredential(“myUserName”,“myPassword”,“myDomain”);'服务工作。但是,我以“myUserName”身份登录到计算机,我希望这些凭据自动传递给lists.asmx服务! – kralco626