技术开发 频道

ASP.NET2.0站点跨服务器访问Sql Sever 2005报表服务



【IT168 技术文档】

今天用了一上午加中午的时间才搞定ASP.NET2.0站点跨服务器访问Sql Sever 2005 Reporting Service的问题。无奈,对Windows集成身份验证方式很不熟悉,很多时间浪费在各种各样的尝试上。
ASP.NET在IIS6上应该是以NETWORK SERVICE帐户运行,而Reporting Service(以后简称RS)站点默认采用Windows集成身份验证,因此,如果ASP.NET要访问RS服务器上的报表,那么RS服务器上必须也有NETWORK SERVICE帐户。因为我这两台服务器都运行在Windows Server 2003上,自然都有NETWORK SERVICE帐户,问题在于,它们的密码肯定不同,难道要我们手工把这2台服务器的NETWORK SERVICE帐户改成一样的?这样不太好吧?因此我决定在2个服务器上都新建一个帐户X,密码相同。下面分别对2台服务器进行设置:
1、ASP.NET服务器
(1)设置帐户X隶属于组IIS_WPG,这样帐户X可以代替帐户NETWORK SERVICE运行ASP.NET系统
(2)在Web.Config文件中将ASP.NET系统设置为启用模拟。配置方法如下:

<system.web>
    <identity impersonate="true" userName="X" password="PwdOfX" />
</system.web>
因为我并不想让服务器上的所有ASP.NET系统都运行在X帐户下,所以这里采用模拟的方式。简单起见,用户名和密码也没有采用加密方式。与此相关的更详细的说明,请参考《如何创建自定义帐户来运行 ASP.NET》
另外需要说明的是:我本来想只在站点的某个子目录(存放所有报表访问页面的目录)下设置模拟,因此在Web.Config中利用<location>针对子目录进行模拟的设置,但是这样访问报表服务会出现“因为安全原因,此 XML 文档中禁用 DTD。要启用 DTD 处理,将 XmlReaderSettings 上的 ProhibitDtd 属性设置为 false,并将该设置传递给 XmlReader.Create 方法。”的错误。因此只能放弃此做法。

2、RS服务器
(1)访问报表服务管理器,默认地址是
http://RSAddress/Reports,其中RSAddress是RS服务器的IP地址、机器名或域名。
(2)登录之后,在主文件夹下,或者导航到需要的目录级别
(3)点击顶部Tab页的“属性”标题,选择“安全性”,然后点击“新建角色分配”
(4)在顶部的“组或用户名”处输入“X”(帐户),下面的角色选择“浏览者”。点击“确定”,完成设置。

2个服务器都设置完成之后,应该就可以从ASP.NET系统上访问RS服务器上的报表了。
这里还有一个意外的问题,就是我一开始是利用VS2005自带的文件系统网站的方式(就是在新建网站的时候选择“文件系统”)访问RS服务器上的报表,无论怎么设置都会报上面所说的那个“因为安全原因,禁用DTD”的错误,改用IIS网站的方式之后就好了。

花费了这么多时间搞这个问题,放在首页,希望大家在遇到类似问题的时候可以少走弯路。

0
相关文章