如何将当前用户凭据传递给.asmx Web服务

时间:2013-08-01 14:43:29

标签: .net sharepoint asmx

情况:

我创建了一个在我的Intranet Web服务器上运行的Web服务。 该服务具有调用Microsoft SparePoint的lists.asmx Web服务的操作。 该服务还有一个测试操作。 当我在本地调用这些服务(visual studio)时,一切都很好。

问题:

当我在Web服务器上将此Web服务部署到IIS时,调用lists.asmx的操作将失败,并显示401错误。当我在登录Web服务器时从IE运行服务或者我正在远程运行服务(我将自定义错误设置为关闭,因此我可以看到401错误)时,会发生这种情况。

期望的结果:

我的网络服务应该获取当前用户的凭据并将其传递给lists.asmx网络服务。

当前代码: 在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服务器上部署时有效,并返回以下两个字符串:

HttpContext.Current.Request.LogonUserIdentity.Name = NT AUTHORITY\IUSR

System.Security.Principal.WindowsIdentity.GetCurrent().Name = IIS APPPOOL\ASP.NET v4.0

因此,如果这提供了任何有用的信息,那么Web服务似乎正在使用IIS应用程序池的用户名。

解决方案:

想法?谢谢!

1 个答案:

答案 0 :(得分:0)

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