Dev*_*rke 7 asp.net iis entity-framework web-services reporting-services
问题:在ASP.NET 4.0中,我使用SSRS 2005服务器的ReportService2005.asmxWeb服务来获取报告列表.同样在.NET中,我使用Entity Framework与我的MS-SQL 2005数据库进行通信.当我使用Visual Studio Development Server作为我的Web服务器时,对SSRS和SQL的调用工作正常.但是,当我切换到IIS 5.1时,SSRS和实体代码都会产生错误.我在IIS中仅使用Windows /集成身份验证.
错误:对于SSRS,我明白了The request failed with HTTP status 401: Unauthorized.
对于实体框架,我得到了 Login failed for user ''. The user is not associated with a trusted SQL Server connection.
尝试的解决方案:在Web.Config中我添加<identity impersonate="true" />了修复的实体框架错误,但没有修复SSRS错误.我扩展了identity引用以包含我的用户名和密码,并修复了所有错误.
问题:为什么指定我的用户名和密码来修复错误,为什么SQL说我没有指定用户名('')?我以为Windows身份验证会自动模仿当前用户.如何在不将"服务"帐户硬编码到web.config中的情况下解决此问题?
Vin*_*ayC 11
Windows或集成身份验证意味着使用Windows凭据(或令牌)标识用户,但这并不意味着该请求在该用户下运行.ASP.NET运行时将在工作进程(App Pool)标识下执行请求,除非您将其配置为模拟其他一些标识.
因此,当您使用开发服务器访问该站点时,服务器以您的身份运行,因此以您的身份访问SSRS和Sql Server并且它可以正常运行.
在IIS下加载站点时,ASP.NET请求将在为应用程序池配置的任何标识下运行.通常,此标识是本地用户,因此将拒绝访问SSRS或Sql Server等网络资源.添加<identity impersonate="true" username="your name" ../>,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的凭据下运行.
您还需要了解"双跃点"问题 - 这意味着您的凭据只能使用两次.
如果您使用Windows身份验证和模拟访问网站,该网站可以像您一样呼叫其他服务.如果该其他服务是另一个网站(即Reporting Services),而该网站又调用另一个服务(例如数据库),则它无法再次传递您的凭据.这意味着如果数据库需要来自用户的凭据,则会抛出错误.
| 归档时间: |
|
| 查看次数: |
18329 次 |
| 最近记录: |