Iis 7 HttpWebRequest401错误

Iis 7 HttpWebRequest401错误,iis-7,httpwebrequest,unauthorized,applicationpoolidentity,Iis 7,Httpwebrequest,Unauthorized,Applicationpoolidentity,我正在开发一个内部网应用程序(Windows身份验证),它从报表服务器下载报表流,然后将其保存为文件。当我在调试模式下运行它时,它工作正常。代码如下: HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.UseDefaultCredentials = true; HttpWebResponse response = (HttpWebResponse)req.GetRes

我正在开发一个内部网应用程序(Windows身份验证),它从报表服务器下载报表流,然后将其保存为文件。当我在调试模式下运行它时,它工作正常。代码如下:

       HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

       req.UseDefaultCredentials = true; 

        HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        Stream fStream = response.GetResponseStream();
但是,在我将其部署到服务器之后,它不会得到响应,而不会得到错误

即使我将代码更改为: HttpWebRequest req=(HttpWebRequest)WebRequest.Create(url)

得到同样的错误。代码中的用户设置具有查看/运行报告的权限

IIS7使用协商和NTLM。(由于复杂原因,无法更改Kerberos),在ApplicationPoolIdentity下运行

我的问题是,当我在调试模式下运行它时,用户是我的windows帐户,但为什么在我尝试将凭据发送到报告服务器时失败


任何人都可以提供帮助?

我捕获了从应用程序服务器到报告服务器的所有请求,发现所有请求头的凭据用户名和域、密码都为空。最后,我认为是NTLM导致了这个问题,因为这里需要两个NTLM无法处理的凭证跃点,需要使用Kerberos


如果不能使用Kerberos身份验证,还有另一种解决方案:禁用asp.net模拟,以便从应用服务器到报表服务器将使用applicationpoolidentity,这是一个本地计算机帐户,其帐户为:domain/machinename$。因此,如果您授予此帐户报表服务器上的浏览权限,它应该可以工作。

我不确定您的IIS是如何配置的,但您的应用程序池设置中的标识似乎覆盖了任何提供的凭据。最明显的是,它试图进行身份验证的用户没有访问权限。也就是说,转到IIS管理器并检查站点应用程序池的标识设置

将其更改为有权访问报表查看器的用户,并且该用户应该能够修复它。我曾经发布过类似的问题,以防有人感兴趣

        string domain = ConfigurationManager.AppSettings["SchedulerDomain"];
        string userName = ConfigurationManager.AppSettings["SchedulerUser"];
        string passWord = ConfigurationManager.AppSettings["SchedulerPassword"];
        NetworkCredential credential = new System.Net.NetworkCredential(userName, passWord, domain);
        req.Credentials = credential;

         HttpWebResponse response = (HttpWebResponse)req.GetResponse();
        Stream fStream = response.GetResponseStream();