如何通过当前用户凭据的.asmx Web服务

问题描述:

现状:如何通过当前用户凭据的.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应用程序池的用户名,如果提供任何有用的信息。

解决方案:

想法?谢谢!

+0

我设置了Windows身份验证在IIS启用,我能得到HttpContext.Current.Request.LogonUserIdentity.Name返回实际的当前用户。但是,lists.asmx web服务仍然返回401错误 – kralco626

+0

当我使用以下代码:'listService.Credentials = new NetworkCredential(“myUserName”,“myPassword”,“myDomain”);'服务工作。但是,我以“myUserName”身份登录到计算机,我希望这些凭据自动传递给lists.asmx服务! – kralco626

您需要在web.config文件中的部分下设置身份验证模式=“Windows”。

+0

在哪个部分? – kralco626

+0

我尝试将它放在system.web部分,并没有改变结果。我还尝试添加'',并且这样会产生错误:'检测到ASP.NET设置不适用于Integrated managed pipeline模式。' – kralco626

+0

我把''放到web.config文件中忽略错误,我仍然得到401错误。其他想法? – kralco626