从Web服务,我需要使用Windows身份验证和asp.net模拟在同一网站中调用另一个Web服务

时间:2012-05-02 21:07:07

标签: c# web-services iis-7

背景/系统信息

  • Windows Server 2008 Standard x64,IIS 7.0
  • 我有一个包含各个IIS应用程序的IIS站点。
  • 每个应用程序都包含用.NET 4.0编写的Web服务,使用Any CPU编译。
  • 所有应用程序共享同一个应用程序池。应用程序池设置为.NET 4.0和集成管道。
  • 该站点已设置为ASP.NET模拟和Windows身份验证。
  • 该网站仅在我们的域/内部网中使用。
  • 客户端应用程序(未在Server 2008机箱上运行但在域内运行的C#应用​​程序)使用生成的代理类使用System.Net.CredentialCache.DefaultCredentials方法传递凭据。

目标

  • 我们有一些Web服务方法需要调用同一站点中存在的Web服务方法,只需要调用该站点下的另一个iis应用程序。

问题

  • 当第一个Web服务方法调用第二个Web服务方法(通过生成的代理类),传递DefaultCredentials或DefaultNetworkCredentials时,我收到401未经授权的错误。

以下是我所知道的以及我尝试过的内容

  • 我已经回顾了几乎所有的文章,所有人都谈到了双跳。我对双跳的术语感到困惑。我没有跳到新机器,我在同一网站的当前机器上。这不是双跳吗?

  • 我们在Windows Server 2003上的IIS 6中运行与.NET 1.1相同的Web服务,并将DefaultCredentials传递给第二个Web服务调用!没有401错误。 IIS 6上的Web服务设置都使用相同的应用程序池,并且都设置为应用程序。

  • 在运行IIS 7.5的Windows 7开发机器上,我能够完成这项工作。我可以使用System.Net.CredentialCache.DefaultNetworkCredentials或System.Net.CredentialCache.DefaultCredentials从另一个Web服务使用代理类调用Web服务。看来我的win7 IIS 7.5站点和我的服务器2008站点设置方式相同。

  • 我尝试为我的网站中的每个应用程序使用不同的应用程序池(集成管道),但没有帮助(我认为不会)。

  • 当我将应用程序池设置为classic时,该站点将无法启动。我收到服务不可用的错误。这很奇怪,因为在我的win7机器上我可以使用经典或集成管道,它工作正常。

    我觉得我很亲密。任何想法或意见将不胜感激!

    谢谢,

1 个答案:

答案 0 :(得分:2)