在ASP.NET 4.0中,我使用SSRS 2005服务器的ReportService2005.asmx Web服务来获取报告列表.同样在.NET中,我使用Entity Framework与我的MS-sql 2005数据库进行通信.当我使用Visual Studio Development Server作为我的Web服务器时,对SSRS和sql的调用工作正常.但是当我切换到IIS 5.1时,SSRS和实体代码都会产生错误.我在IIS中仅使用Windows /集成身份验证.
错误:
对于SSRS,我得到请求失败,HTTP状态401:未经授权.
对于Entity Framework,我的用户”登录失败.用户未与受信任的sql Server连接关联.
尝试的解决方案:
在Web.Config中,我添加了< identity impersonate =“true”/>并修复了实体框架错误,但没有修复SSRS错误.我扩展了身份参考以包含我的用户名和密码,并修复了所有错误.
题:
为什么指定我的用户名和密码来修复错误,为什么sql说我没有指定用户名(”)?我以为Windows身份验证会自动模仿当前用户.如何在不将“服务”帐户硬编码到web.config中的情况下解决此问题?
解决方法
因此,当您使用开发服务器访问该站点时,服务器以您的身份运行,因此可以根据您的身份访问SSRS和sql Server,并且它可以正常运行.
在IIS下加载站点时,ASP.NET请求将在为应用程序池配置的任何标识下运行.通常,此标识是本地用户,因此将拒绝访问SSRS或sql Server等网络资源.添加< identity impersonate =“true”username =“your name”../\u0026gt ;,ASP.NET将以您的身份运行请求,这应该适用于SSRS和sql Server. 这里奇怪的情况是< identity impersonate =“true”/> – 在此设置下,ASP.NET将模拟当前经过身份验证的Windows身份.但是,为了使其正常工作,您在集成身份验证上配置了IIS和ASP.NET,并拒绝匿名访问(在ASP.NET和IIS中).如果不这样做可能会导致无法验证当前用户的身份,并且请求将以匿名用户的身份(在IIS中配置)运行.如果您在IIS中标记了集成身份验证,但在ASP.NET中没有标记,则身份将不会传递给ASP.NET请求.您需要检查您的环境以查看您遇到的确切方案,但最终结果是您的ASP.NET请求在可以访问sql Server而不是SSRS的凭据下运行.